git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Making submodules easier to work with (auto-update on checkout or merge, stash & restore submodules)
@ 2008-04-30  4:08 Tim Harper
  2008-04-30  4:47 ` Tim Harper
                   ` (2 more replies)
  0 siblings, 3 replies; 22+ messages in thread
From: Tim Harper @ 2008-04-30  4:08 UTC (permalink / raw)
  To: git

OVERVIEW:
On the Git TextMate Bundle, I've automated a lot of the submodule  
commands to make them not a terrible pain to work with. (don't get me  
wrong - I really like the git submodule implementation, I just don't  
like how hard it is to work with).

"WARTS" WITH EXISTING IMPLEMENTATION
1) The submodule stays in the working copy when changing to a branch  
that does not have a submodule.  This can break a build and cause  
problems.  To work around, I have to delete the folder completely (git- 
clean).  Then, when I switch back to the branch again, I have to re- 
download the submodule.
2) I have to type "git checkout branch && git submodule init && git  
submodule update" to be sure that I really have the whole contents of  
the branch.  That's 3 commands, and a lot of typing.
3) If I don't run "git submodule update", and carelessly run "git  
commit -a" or "git add .", I risk propagating a submodule version from  
another branch or undoing an important change.

SUGGESTED ALGORITHM (AS HAS BEEN IMPLEMENTED IN THE GIT TEXTMATE BUNDLE)
When pulling / merging / changing branches:
1) cache all submodules to ~/.git/submodules_cache
    a) move from the working directory to a folder that is a MD5 hex- 
hash of both the submodule path and the submodule url
2) execute the pull / merge / branch change
3) restore all defined submodules to ~/.git/submodules_cache (only the  
submodules that are still defined after the merge / change / pull)
4) execute git submodule init && git submodule update


PITFALLS:
pitfall)
If you commit a change on a submodule that's not on a branch, auto- 
updating submodules will make it difficult to revive that change.

workaround)
Don't allow the user to commit unless they are on a branch.

... couldn't think of anymore.  Anyone?

CONCLUSION
So far, this algorithm holds up well in my use cases, and has made  
submodule management seamless for me (I don't have to know that I'm  
working with submodules).  It's resolved every one of the above  
outlined interface warts.

Would it be a good idea to build this algorithm into git?  What would  
be the best approach?  Am I completely overlooking something by  
designing the Git TextMate bundle to handle submodules this way?

Thanks,
Tim

^ permalink raw reply	[flat|nested] 22+ messages in thread

end of thread, other threads:[~2008-05-08  1:14 UTC | newest]

Thread overview: 22+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-30  4:08 Making submodules easier to work with (auto-update on checkout or merge, stash & restore submodules) Tim Harper
2008-04-30  4:47 ` Tim Harper
2008-04-30  6:14 ` Andreas Ericsson
2008-04-30 10:31 ` Johannes Schindelin
2008-04-30 16:47   ` Avery Pennarun
2008-04-30 17:21     ` Ping Yin
2008-04-30 19:55     ` Roman Shaposhnik
2008-04-30 20:26       ` Avery Pennarun
2008-04-30 20:19   ` Tim Harper
2008-04-30 20:31     ` Avery Pennarun
2008-04-30 21:37       ` Tim Harper
2008-04-30 21:48         ` Avery Pennarun
2008-04-30 22:23           ` Roman Shaposhnik
2008-04-30 22:28             ` Avery Pennarun
2008-05-01 18:38               ` Making submodules easier to work with Finn Arne Gangstad
2008-05-01 19:55                 ` Avery Pennarun
2008-05-06 23:47                   ` Roman Shaposhnik
2008-05-07 16:14                     ` Avery Pennarun
2008-05-08  1:13                       ` Ping Yin
2008-05-01 23:29                 ` Steven Grimm
2008-05-06 23:17                   ` Roman Shaposhnik
2008-05-01  4:56     ` Making submodules easier to work with (auto-update on checkout or merge, stash & restore submodules) Ping Yin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).