<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>
Hey! My name’s Darrin Holst and I GOTS A BLOG!

Follow me at…

twitter
  github
  google+
  pinboard
  goodreads

  var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
  document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));

  try {
    var pageTracker = _gat._getTracker("UA-3052115-1");
    pageTracker._trackPageview();
    } catch(err) {}
</description><title>a blog</title><generator>Tumblr (3.0; @darrinholst)</generator><link>http://darrinholst.com/</link><item><title>Overriding ruby module methods</title><description>&lt;p&gt;I learned something new about Module.include the other day. Consider the following:&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/1640500"&gt;https://gist.github.com/1640500&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;It outputs chicken as I would expect since it was the last one included, but it also does one more thing that I didn’t expect. It sets up a method inheritance chain for duplicate methods so you have access to the method you have overridden. So if we call super in our example:&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/1640677"&gt;https://gist.github.com/1640677&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;You get a proper turducken. Of course there are some order dependencies in my contrived example, but you get the point.&lt;/p&gt;
&lt;p&gt;One real world example that I used this for was rails tag helpers. I wanted to wrap each text input in a div (take your snarky semantic markup comments somewhere else). So I just defined a text_field method in my helper and then wrapped the output of the super call.&lt;/p&gt;
&lt;div class="gist"&gt;&lt;a href="https://gist.github.com/1640714"&gt;https://gist.github.com/1640714&lt;/a&gt;&lt;/div&gt;</description><link>http://darrinholst.com/post/16116450958</link><guid>http://darrinholst.com/post/16116450958</guid><pubDate>Thu, 19 Jan 2012 09:10:00 -0600</pubDate><category>ruby</category></item><item><title>Control Tabbing with Vim</title><description>&lt;p&gt;Every once in a while I’ll go down the rabbit hole of trying to get proper control tabbing working in vim. If you’re not familiar with control tabbing through files in your editor think of it the same way as command tabbing through applications is osx or alt tabbing in windows. All the files that you’re working with are in a stack and the most recently used ones stay at the top. From the extensive research I’ve done not a lot of developers use this, but once you get used to it it’s hard to use something that doesn’t have it…like vim.&lt;/p&gt;
&lt;p&gt;Up until now I’ve been using a combination of :bu # bound to Control-Tab and &lt;a href="http://www.vim.org/scripts/script.php?script_id=42"&gt;the bufexplorer plugin&lt;/a&gt; bound to ,bb. If I want to quickly go back and forth between the top two buffers I’d use Control Tab, if I wanted to go back farther in history I’d use ,bb. Bufexplorer has a Most Recently Used option so the list shows up how I’d expect it to.&lt;/p&gt;
&lt;p&gt;&lt;img title="[BufExplorer] - (~_Projects_chromepaper) - VIM-3.jpg" src="http://dl.dropbox.com/u/2144189/blog/darrinholst/controltab/%5BBufExplorer%5D%20-%20%28%7E_Projects_chromepaper%29%20-%20VIM-3.jpg" border="0" alt="[BufExplorer] - (~_Projects_chromepaper) - VIM-3.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;There are two things I don’t like about this. First, I have separate commands to navigate buffers…Control-Tab and ,bb. The second thing I don’t like is bufexplorer loads in a new window which takes me out of my flow.&lt;/p&gt;
&lt;p&gt;So after playing around with &lt;a href="http://www.sublimetext.com/2"&gt;Sublime Text 2&lt;/a&gt; the other day and seeing that they have this functionality I thought I’d give it another shot. What I found was &lt;a href="http://www.vim.org/scripts/script.php?script_id=2050"&gt;LustyJuggler&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;LustyJuggler will load all your buffers in a strip along the bottom and you can navigate with arrow keys, number keys, or home row keys. It also lists them in Most Recently Used order.&lt;/p&gt;
&lt;p&gt;&lt;img title="vimrc (~) - VIM.jpg" src="http://dl.dropbox.com/u/2144189/blog/darrinholst/controltab/vimrc%20%28%7E%29%20-%20VIM.jpg" border="0" alt="vimrc (~) - VIM.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;At first I wasn’t any happier with this solution than I was with bufexplorer…until I RTFM and found the LustyJugglerAltTabMode option. With this option set, activating LustyJuggler will automatically highlight the previous buffer.&lt;/p&gt;
&lt;p&gt;&lt;img title="vimrc (~) - VIM 2.jpg" src="http://dl.dropbox.com/u/2144189/blog/darrinholst/controltab/vimrc%20%28%7E%29%20-%20VIM%202.jpg" border="0" alt="vimrc (~) - VIM 2.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;Continuing to activate it will cycle through the list. So now with Control-Tab bound to this I can quickly Control-Tab and then Enter for the buffer I want.&lt;/p&gt;
&lt;pre&gt;let g:LustyJugglerAltTabMode = 1
noremap &lt;silent&gt; &lt;C-Tab&gt; :LustyJuggler&lt;CR&gt;
&lt;/pre&gt;
&lt;p&gt;This is almost the behavior that I want. The only thing I don’t like about it is that extra Enter when selecting a buffer instead of selecting it when you release. I’m not sure if you can do that in Vim, but it shouldn’t take too long to build up the muscle memory to do it.&lt;/p&gt;</description><link>http://darrinholst.com/post/15946656216</link><guid>http://darrinholst.com/post/15946656216</guid><pubDate>Mon, 16 Jan 2012 08:50:19 -0600</pubDate><category>vim</category></item><item><title>How fast can you get it up?</title><description>&lt;p&gt;So with OS X Lion just around the corner I’ve been thinking about the steps to get my computer up and running from a fresh install. You do do a fresh install, right? I’ll be testing these steps out in the next couple of weeks, but here’s what I have in my head…&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;install OS X development tools (do I have to buy this now from the App Store?)&lt;/li&gt;
&lt;li&gt;install &lt;a href="http://www.iterm2.com/"&gt;iTerm&lt;/a&gt; (because Terminal.app is a little long in the tooth)&lt;/li&gt;
&lt;li&gt;install &lt;a href="https://github.com/mxcl/homebrew"&gt;Homebrew&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;brew install ack git tig wget&lt;/li&gt;
&lt;li&gt;install &lt;a href="https://rvm.beginrescueend.com/"&gt;rvm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;rvm install 1.9.2&lt;/li&gt;
&lt;li&gt;rvm —default use 1.9.2&lt;/li&gt;
&lt;li&gt;gem install rake (might be installed by default)&lt;/li&gt;
&lt;li&gt;git clone https://github.com/darrinholst/dotfiles .dotfiles (you should save your config files somewhere)&lt;/li&gt;
&lt;li&gt;cd .dotfiles&lt;/li&gt;
&lt;li&gt;rake link (symlinks everything into my home directory)&lt;/li&gt;
&lt;li&gt;install &lt;a href="https://github.com/robbyrussell/oh-my-zsh"&gt;oh-my-zsh&lt;/a&gt; (because who uses bash anymore?)&lt;/li&gt;
&lt;li&gt;install &lt;a href="https://github.com/carlhuda/janus"&gt;janus&lt;/a&gt; (I’m a vim guy)&lt;/li&gt;
&lt;li&gt;install &lt;a href="http://code.google.com/p/macvim/"&gt;MacVim&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;install my &lt;a href="https://github.com/andreberg/Meslo-Font"&gt;favorite font of the week&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;At this point I could start to get some work done…but what fun is that? These are the apps that I’ll need right away&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.google.com/chrome"&gt;Chrome&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.dropbox.com/"&gt;Dropbox&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.alfredapp.com/"&gt;Alfred&lt;/a&gt; (app launcher)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://irradiatedsoftware.com/sizeup/"&gt;SizeUp&lt;/a&gt; (window sizer)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;and these are the apps that I’ll install as I need them&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://adium.im/"&gt;Adium&lt;/a&gt; (chat)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lightheadsw.com/caffeine/"&gt;Caffeine&lt;/a&gt; (keeps my computer awake when I want it to)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.charlesproxy.com/"&gt;Charles&lt;/a&gt; (http proxy for debugging)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.bohemiancoding.com/drawit"&gt;DrawIt&lt;/a&gt; (vector image editor)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mozilla.com/en-US/firefox/new/"&gt;Firefox&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.jetbrains.com/idea/"&gt;IntelliJ&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://notational.net/"&gt;Notational Velocity&lt;/a&gt; (plain text file organizer)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.pixelmator.com/"&gt;Pixelmator&lt;/a&gt; (image editor)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://propaneapp.com/"&gt;Propane&lt;/a&gt; (Campfire wrapper)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://itunes.apple.com/app/rulers/id415310758?mt=12"&gt;Rulers&lt;/a&gt; (measures stuff)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://skitch.com/"&gt;Skitch&lt;/a&gt; (screen shots)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://itunes.apple.com/us/app/twitter/id409789998?mt=12"&gt;Twitter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.vmware.com/products/fusion/overview.html"&gt;VMWare Fusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;That’s at least a good 3 days of standup updates, I’ll update with anything else I find. &lt;/p&gt;</description><link>http://darrinholst.com/post/7636301742</link><guid>http://darrinholst.com/post/7636301742</guid><pubDate>Thu, 14 Jul 2011 20:43:00 -0500</pubDate><category>mac</category></item><item><title>My obligatory post on webOS</title><description>&lt;p&gt;So it seems the cool thing to do in the webOS dev community is to write a blog post about their view on the webOS announcement this week…so here’s mine.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;History&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The first time I ever used a Palm device was around April of 2010, so I’m not a Palm lifer. The company I was working for at the time was building mobile apps and a webOS app was one of them. I was skeptical at first, but since I had quite a bit of history with Prototype I decided to help out. I was hooked from then on. I started writing Reboxed shortly after, with 1Reader, Spare Time, and Feeder to follow.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hardware&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I’ve never been a big fan of physical keyboards or sliders or flippers or anything like that. My phone of choice is a slab device (like the iPhone). That being said I was a little more than disappointed when no slab device was announced and HP was staying with the slider type. It may sound trivial, but that’s the main reason I will no longer being using a webOS device.&lt;/p&gt;
&lt;p&gt;As for tablets? I don’t really care about tablets so it was a non-announcement for me as a user. I had an iPad for a few weeks when it first came out and I felt myself using it just because I had it…not because it helped me get anything done better or faster. I’m a *little* interested in tablets as a developer just because the small device apps don’t scale up to the tablet form factor very well and I would need to do some tweaking on my apps. I really doubt that HP will make much headway in the tablet market with a “me too” device like they announced.&lt;/p&gt;
&lt;p&gt;webOS on PCs? Really? This blows my mind…not because it’s really cool, but because it’s really unnecessary. HP needs to check their WIP and focus on making 1 thing really cool first before throwing everything against the wall and seeing what sticks.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Enyo&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;One of the major draws to webOS that Palm pushed was it’s just like web development…html, js, css and that’s true…with mojo. Enyo changes that quite a bit, at first glance it looks they’re extracting the html and css away from developers. I happen to like html and css so I’m not really excited about this. Maybe I’m missing something, but the last thing I want to do is learn yet another framework, especially for so low of a market share. Now if they do something with enyo like make it a general web application framework then that may be something to keep your eye on.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Future Developement&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The way it is looking now, I will no longer be doing any webOS development. I will fix bugs in my current apps as they appear and if they completely break then I will pull them from the market. I love javascript development, but I have too many other things up in the air right now to focus on.&lt;/p&gt;</description><link>http://darrinholst.com/post/3235082450</link><guid>http://darrinholst.com/post/3235082450</guid><pubDate>Fri, 11 Feb 2011 10:27:00 -0600</pubDate><category>webos</category><category>hp</category><category>palm</category></item><item><title>backup backup backup</title><description>&lt;p&gt;I’ve gone through many variations of my backup strategy since I started storing things digitally. Here is my current setup…&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;The master copy is stored on my iMac’s local disk.&lt;/li&gt;
&lt;li&gt;Everything except music and dvds are synced with &lt;a title="dropbox" href="http://www.dropbox.com"&gt;dropbox&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Everything is one way synced to external drive 1 via &lt;a title="chronosync" href="http://www.econtechnologies.com/pages/cs/chrono_overview.html"&gt;chronosync&lt;/a&gt; nightly.&lt;/li&gt;
&lt;li&gt;External drive 1 is cloned to external drive 2 via &lt;a title="superduper" href="http://www.shirt-pocket.com/SuperDuper/SuperDuperDescription.html"&gt;superduper&lt;/a&gt; weekly.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;I just recently switched my offsite backup from s3/jungledisk to dropbox. Dropbox is significantly faster at uploading (at least at my house). Dropbox does this cool thing where if you try to upload a file that is already on their system it won’t actually push the bits, instead it will point to the existing copy or make a duplicate internally at dropbox (not sure what actually happens, but it doesn’t matter the point is that you don’t have to upload that file). The dropbox clients are faster at syncing between machines when compared to jungledisk’s sync feature.&lt;/p&gt;
&lt;p&gt;The one way sync (nothing is deleted) with chronosync is an important piece since if you delete something on one dropboxed client then that deletion is instantly propagated everywhere. So if you decide you don’t want something on one machine and you delete it then it gets deleted on every machine that is using dropbox. Dropbox will soon come with selective sync which I am anxiously awaiting.&lt;/p&gt;
&lt;p&gt;The superduper clone is just a last chance backup incase of disk failures.&lt;/p&gt;
&lt;p&gt;I’m sure this setup will change again, but I’m pretty happy with it for now.&lt;/p&gt;</description><link>http://darrinholst.com/post/413204323</link><guid>http://darrinholst.com/post/413204323</guid><pubDate>Fri, 26 Feb 2010 06:56:32 -0600</pubDate><category>backup</category></item><item><title>changing git commit messages</title><description>&lt;p&gt;Changing your last commit message in a git repository is fairly trivial&lt;/p&gt;
&lt;pre&gt;git commit --amend -m "some other message"&lt;/pre&gt;
&lt;p&gt;but what if you’ve made several commits and want to change a message that’s not the last one? An interactive rebase is one way to do this. First find the commit just before the message you want to change&lt;/p&gt;
&lt;pre&gt;~/Work/repo (master) $ &lt;b&gt;git lg&lt;/b&gt;
* 6119426 - (master) third commit (3 seconds ago by Darrin Holst)
* b6a0a9f - &lt;b&gt;second commit&lt;/b&gt; (23 seconds ago by Darrin Holst)
* &lt;b&gt;e24b57d&lt;/b&gt; - first commit (37 seconds ago by Darrin Holst)
&lt;/pre&gt;
&lt;p&gt;Then start the interactive rebase&lt;/p&gt;
&lt;pre&gt;~/Work/repo (master) $ &lt;b&gt;git rebase --interactive e24b57d&lt;/b&gt;&lt;/pre&gt;
&lt;p&gt;Which will open up your editor with…&lt;/p&gt;
&lt;pre&gt;pick b6a0a9f second commit
pick 6119426 third commit

# Rebase e24b57d..6119426 onto e24b57d
#
# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
&lt;/pre&gt;
&lt;p&gt;Change “pick” to “edit” for those that you want to edit and save that file&lt;/p&gt;
&lt;pre&gt;&lt;b&gt;edit&lt;/b&gt; b6a0a9f second commit
pick 6119426 third commit

# Rebase e24b57d..6119426 onto e24b57d
#
# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#
&lt;/pre&gt;
&lt;p&gt;Now amend that commit&lt;/p&gt;
&lt;pre&gt;~/Work/repo (master) $ &lt;b&gt;git commit --amend -m "some other message"&lt;/b&gt;&lt;/pre&gt;
&lt;p&gt;Then continue the rebase&lt;/p&gt;
&lt;pre&gt;~/Work/repo (master) $ &lt;b&gt;git rebase --continue&lt;/b&gt;&lt;/pre&gt;
&lt;pre&gt;~/Work/repo (master) $ &lt;b&gt;git lg&lt;/b&gt;
* cec3fba - (master) third commit (2 seconds ago by Darrin Holst)
* c146f90 - some other message (29 seconds ago by Darrin Holst)
* e24b57d - first commit (5 minutes ago by Darrin Holst)
&lt;/pre&gt;
&lt;p&gt;Congratulations, you have just changed history, but remember all the same rules apply for rebasing commits that you’ve pushed to a public repository (hint - don’t do it)&lt;/p&gt;
&lt;p&gt;Thanks to &lt;a href="http://twitter.com/rubbish"&gt;@rubbish&lt;/a&gt; and &lt;a href="http://twitter.com/developernotes"&gt;@developernotes&lt;/a&gt; for the info&lt;/p&gt;</description><link>http://darrinholst.com/post/359817782</link><guid>http://darrinholst.com/post/359817782</guid><pubDate>Fri, 29 Jan 2010 10:38:51 -0600</pubDate><category>git</category></item><item><title>git add...all of it damn it</title><description>&lt;p&gt;&lt;strike&gt;So we all know that &lt;strong&gt;&lt;code&gt;git add .&lt;/code&gt;&lt;/strong&gt; will add all new and modified files to the index. What about the 50 files you deleted that you also want to stage? git rm 50 times? How about adding the -u option to git add which will stage modified files and also deleted files? The one problem with that is it doesn’t add new files. So if you want to stage all new files, modified files, and deleted files then you’re forced to &lt;strong&gt;&lt;code&gt;git add . &amp;&amp; git add -u&lt;/code&gt;&lt;/strong&gt;. We can wrap that up into an alias to save some keystrokes…&lt;/strike&gt;&lt;/p&gt;
&lt;pre&gt;&lt;strike&gt;git config --global alias.ad '!git add . &amp;&amp; git add -u'

&lt;/strike&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strike&gt;Now just use &lt;strong&gt;&lt;code&gt;git ad&lt;/code&gt;&lt;/strong&gt; and everything will be ready to commit&lt;/strike&gt;&lt;/p&gt;
&lt;p&gt;As mentioned in the comments…&lt;/p&gt;
&lt;pre&gt;&lt;strong&gt;git add -A&lt;/strong&gt;&lt;/pre&gt;
&lt;p&gt;…stages all modified, new, and deleted files.&lt;/p&gt;</description><link>http://darrinholst.com/post/234568461</link><guid>http://darrinholst.com/post/234568461</guid><pubDate>Thu, 05 Nov 2009 21:44:00 -0600</pubDate><category>git</category></item><item><title>TextMate not finding your gems?</title><description>&lt;p&gt;If you’ve built ruby yourself and stuck it in /usr/local/bin you may run into a problem where textmate is using the pre-installed version of ruby. That will result in searching for gems in the pre-installed location (wherever that is)&lt;/p&gt;
&lt;p&gt;To fix this add a shell variable called TM_RUBY in the advanced preferences of TM pointing to /usr/local/bin/ruby&lt;/p&gt;</description><link>http://darrinholst.com/post/195012461</link><guid>http://darrinholst.com/post/195012461</guid><pubDate>Wed, 23 Sep 2009 09:34:00 -0500</pubDate><category>ruby</category><category>textmate</category></item><item><title>track git remote branch (note to self)</title><description>&lt;p&gt;&lt;pre&gt;git config branch.master.remote origin
git config branch.master.merge refs/heads/master
&lt;/pre&gt;&lt;/p&gt;</description><link>http://darrinholst.com/post/194932754</link><guid>http://darrinholst.com/post/194932754</guid><pubDate>Wed, 23 Sep 2009 07:12:07 -0500</pubDate><category>git</category></item><item><title>Eclipse vs. IntelliJ</title><description>&lt;p&gt;I’ve been a looong time eclipse user and have tried intellij off and on over that time. I never really got hooked on intellij like some people I know…until recently. I’m not sure why it stuck with me this time, but this post will serve as my list that I can point people to when I get asked “the question”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;IntelliJ - The Good&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Selectable color themes (absolute pain in eclipse)&lt;/li&gt;
&lt;li&gt;Maven works out of the box&lt;/li&gt;
&lt;li&gt;better plugin manager&lt;/li&gt;
&lt;li&gt;better ruby support (which gives me cucumber syntax highlighting)&lt;/li&gt;
&lt;li&gt;when extracting methods, variables, etc. just put your cursor anywhere on the expression and pick which one you want if there are multiple (eclipse has to have the exact expression highlighted)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Not too much for now, but I’ll add to it as thing come to me.&lt;/p&gt;</description><link>http://darrinholst.com/post/189037569</link><guid>http://darrinholst.com/post/189037569</guid><pubDate>Tue, 15 Sep 2009 22:14:00 -0500</pubDate><category>ide</category><category>eclipse</category><category>intellij</category></item><item><title>git integration not working in textmate?</title><description>&lt;p&gt;So you installed &lt;a href="http://github.com/ciaran/projectplus"&gt;projectplus&lt;/a&gt; or the git bundle for textmate and it doesn’t work? Try setting a TM_GIT shell variable (located in the advanced properties) to /usr/local/git/bin/git.&lt;/p&gt;</description><link>http://darrinholst.com/post/163898980</link><guid>http://darrinholst.com/post/163898980</guid><pubDate>Sat, 15 Aug 2009 22:16:26 -0500</pubDate><category>git</category><category>textmate</category></item><item><title>svn:externals in git?</title><description>&lt;p&gt;For all the benefits git has over svn, I found one thing that I was missing…svn:externals. There are a few suggesstions that you come across when searching around on this topic, one being git subprojects and another being git submodules.&lt;/p&gt;
&lt;p&gt;I couldn’t find (read lost desire) a whole lot on subprojects, but from what I got out of it is you just do a git clone of your external project in whatever directory of your  project. I tried that, committed, and pushed, but when I cloned it back just the directory was there…no files. Granted, I didn’t spend a lot of time on this, but if it were as easy as clone, commit, push then I guess everyone would be using it.&lt;/p&gt;
&lt;p&gt;Git submodules are a little more involved and require extra commands after a clone…git submodule update. Also, these modules are bound to a specific commit where I wanted the latest (like how svn:externals work). Too much work.&lt;/p&gt;
&lt;p&gt;So it appears, unless I’m missing something, that git doesn’t have a 100% replacement for svn:externals.&lt;/p&gt;
&lt;p&gt;In my case I don’t care about the history of the external repo being in my repo, I just want the latest in there. Also, the external repo I need is relatively small so duplication between repos is not an issue. Finally, I don’t need to change or push to the external repo from the local one.&lt;/p&gt;
&lt;p&gt;So I ended up with a sync job that runs every hour that looks like this…&lt;/p&gt;
&lt;pre&gt;#!sh&lt;br/&gt;&lt;br/&gt;function sync_project() {&lt;br/&gt;  rm -rf $1&lt;br/&gt;  git clone ssh://git-server/$1.git&lt;br/&gt;  cd $1&lt;br/&gt;  rm -rf local/path/external-project&lt;br/&gt;  mkdir -p local/path&lt;br/&gt;  cp -R ../external-project local/path&lt;br/&gt;  rm -rf `/bin/find . -type d -name .svn`&lt;br/&gt;  git add .&lt;br/&gt;  git add -u&lt;br/&gt;  git commit -m "auto sync"&lt;br/&gt;  git push origin master&lt;br/&gt;  cd ..&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;rm -rf external-project&lt;br/&gt;svn co http://svn/external-project&lt;br/&gt;sync_project "my-project"&lt;br/&gt;sync_project "my-other-project"&lt;/pre&gt;

&lt;p&gt;You’ll notice that my external project comes from svn, this can easily be replaced with whatever scm it’s in.&lt;/p&gt;</description><link>http://darrinholst.com/post/162307644</link><guid>http://darrinholst.com/post/162307644</guid><pubDate>Thu, 13 Aug 2009 16:26:00 -0500</pubDate><category>git</category><category>svn</category></item><item><title>git pull with uncommitted files</title><description>&lt;p&gt;Suppose for whatever reason you need to pull in changes from a remote repository and you have uncommitted files that you don’t want to commit. Git won’t let you do that if it needs to merge changes to one of your uncommitted files. Try this…&lt;/p&gt;
&lt;p&gt;git stash&lt;/p&gt;
&lt;p&gt;git pull&lt;/p&gt;
&lt;p&gt;git stash pop&lt;/p&gt;</description><link>http://darrinholst.com/post/161315325</link><guid>http://darrinholst.com/post/161315325</guid><pubDate>Wed, 12 Aug 2009 10:01:00 -0500</pubDate><category>git</category></item></channel></rss>

