{"id":23383,"date":"2015-01-24T14:07:06","date_gmt":"2015-01-24T12:07:06","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=23383"},"modified":"2015-01-24T14:07:06","modified_gmt":"2015-01-24T12:07:06","slug":"gitlet-git-implemented-in-javascript","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2015\/01\/24\/gitlet-git-implemented-in-javascript\/","title":{"rendered":"Gitlet &#8211; git implemented in JavaScript"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p><a href=\"https:\/\/github.com\/maryrosecook\/gitlet\">Gitlet<\/a> &#8211; git implemented in JavaScript. \u00a0Why, you ask?<\/p>\n<blockquote><p>Over the last six years, I&#8217;ve become better at using Git for version control. But my conceptions of the index, the working copy, the object graph and remotes have just grown fuzzier.<\/p>\n<p><strong>Sometimes, I can only understand something by implementing it. So, I wrote Gitlet, my own version of Git.<\/strong> I pored over tutorials. I read articles about internals. I tried to understand how API commands work by reading the docs, then gave up and ran hundreds of experiments on repositories and rummaged throught the <code>.git<\/code> directory to figure out the results.<\/p>\n<p>I discovered that, if approached from the inside out, Git is easy to understand. It is the product of simple ideas that, when combined, produce something very deep and beautiful.<\/p><\/blockquote>\n<p>Spoken like a true hacker. \u00a0My hat is off to you, sir.<\/p>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>Gitlet &#8211; git implemented in JavaScript. \u00a0Why, you ask? Over the last six years, I&#8217;ve become better at using Git for version control. But my conceptions of the index, the working copy, the object graph and remotes have just grown fuzzier. Sometimes, I can only understand something by implementing it. So, I wrote Gitlet, my &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2015\/01\/24\/gitlet-git-implemented-in-javascript\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Gitlet &#8211; git implemented in JavaScript<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"link","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Gitlet - #git implemented in #JavaScript #geek","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_links_to":"","_links_to_target":""},"categories":[1,18,62],"tags":[1228,2265,1139,1588],"keyring_services":[],"class_list":["post-23383","post","type-post","status-publish","format-link","hentry","category-general","category-programming","category-technology","tag-geek-culture","tag-git","tag-javascript","tag-version-control","post_format-post-format-link"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":26280,"url":"https:\/\/mamchenkov.net\/wordpress\/2016\/07\/24\/git-from-the-inside-out\/","url_meta":{"origin":23383,"position":0},"title":"Git from the inside out","author":"Leonid Mamchenkov","date":"July 24, 2016","format":false,"excerpt":"Git from the inside out - must be the best thing I've ever seen on how git works. \u00a0Everybody knows that git is awesome. \u00a0Most know that git is implemented with graphs. \u00a0But not many know how exactly git stores the project history and how it is affected by different\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"git","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2016\/07\/git-500x149.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":21877,"url":"https:\/\/mamchenkov.net\/wordpress\/2014\/05\/29\/gitjk-undo-what-you-just-did-in-git\/","url_meta":{"origin":23383,"position":1},"title":"gitjk &#8211; undo what you just did in git","author":"Leonid Mamchenkov","date":"May 29, 2014","format":"link","excerpt":"gitjk - undo what you just did in git. Supports the following git commands: add, archive, branch, cat-file, checkout, clone, commit, diff, fetch, grep, init, log, ls-tree, merge, mv, pull, push, remote, revert, rm, show, stash,status. Support for the following git commands is not implemented: bisect, fsck, gc, prune, rebase,\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":29058,"url":"https:\/\/mamchenkov.net\/wordpress\/2018\/12\/10\/git-merge-vs-git-rebase\/","url_meta":{"origin":23383,"position":2},"title":"git merge vs. git rebase","author":"Leonid Mamchenkov","date":"December 10, 2018","format":false,"excerpt":"There's a lot of confusion between git merge and git rebase even among seasoned users of git.\u00a0 \"An Introduction to Git Merge and Git Rebase: What They Do and When to Use Them\" is a great article explaining the pros and cons of each, and when and why using each\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2018\/12\/git-merge-rebase.jpeg?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2018\/12\/git-merge-rebase.jpeg?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2018\/12\/git-merge-rebase.jpeg?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":26355,"url":"https:\/\/mamchenkov.net\/wordpress\/2016\/08\/17\/git-workflow-basics\/","url_meta":{"origin":23383,"position":3},"title":"Git Workflow Basics","author":"Leonid Mamchenkov","date":"August 17, 2016","format":false,"excerpt":"\"Git Workflow Basics\" is yet another take on the git workflow. \u00a0 This subject has been covered in a variety of ways before (here, here, and here, for example), but I think it's super important for every developer to understand, so if all the other attempts left you puzzled and\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"git workflow","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2016\/08\/git-workflow-500x278.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":25046,"url":"https:\/\/mamchenkov.net\/wordpress\/2015\/12\/12\/fixing-mistakes-in-git\/","url_meta":{"origin":23383,"position":4},"title":"Fixing mistakes in Git","author":"Leonid Mamchenkov","date":"December 12, 2015","format":false,"excerpt":"Linux.com reiterates over the ways to fix and undo mistakes using Git version control software. \u00a0Seasoned git users will probably know all of these already, but since I have to explain these things to git newcomers, I thought I'd have it handy somewhere here.","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"git","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2015\/12\/git.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":15802,"url":"https:\/\/mamchenkov.net\/wordpress\/2011\/10\/28\/think-like-a-git\/","url_meta":{"origin":23383,"position":5},"title":"Think Like a Git","author":"Leonid Mamchenkov","date":"October 28, 2011","format":false,"excerpt":"Being a sysadmin and web developer I read plenty of technical documentation - manuals, tutorials, howtos, and so on and so forth. Most of it is usually very dry and boring. Unless, of course, we are talking about Open Source Software. That area is often very human, with plenty of\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2011\/10\/Think-Like-a-Git-500x270.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/23383","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=23383"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/23383\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=23383"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=23383"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=23383"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=23383"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}