[Kde-scm-interest] [PATCH] scripty
Chani
chanika at gmail.com
Mon Jun 1 23:54:50 CEST 2009
On June 1, 2009 14:03:44 Thiago Macieira wrote:
> Chani wrote:
> >git reset doesn't change what local branch I'm on, does it? it resets
> > that branch to be all clean? so I have to make sure I reset it to the
> > right branch... eew...
>
> git reset simply changes what commit the current checkout points to. If
> you have a branch checked out, that branch is moved to the commit you give
> it.
>
> So:
> git commit -a -m "foo"
> git reset HEAD~
>
> Moves the current branch to HEAD~ (the parent commit of HEAD), which means
> it's like the commit never happened.
>
> If you pass reset the --hard option, besides moving the branch, it *also*
> checks out the files.
>
> For example, in a Qt checkout, the following is entirely permissible:
>
> git checkout foo
> git reset --hard origin/master
> git reset --hard origin/4.5
>
> The two commands change completely the contents of the checkout (and move
> the branch "foo" too). It really doesn't matter how you created foo. That
> also means you don't have to create many local branches for scripty: one
> branch suffices, as long as you keep resetting between them. The difference
> will be when you push.
>
> Now, note that reset --hard *only* touches files that are in the
> repository. It will not touch files that are not tracked. If, in the
> process of resetting, a new file must be checked out, but the given file
> already exists, it complains and refuses to continue.
>
> That's why you have to do a git clean before you reset.
>
> >although since we're about to checkout a different branch, maybe commits
> > on that other branch don't matter. scripty itself will try to undo its
> > commits if it fails to push, anyways.
> >
> >so I could find out what branch I'm on and reset that, or I could do the
> > reset after the checkout, or I could just be lazy and not reset.
>
> Or you could completely ignore which branch you're on and simply work on
> the branches you have to work on.
>
> The following code will operate with a single local branch (doesn't matter
> which one you start on!):
>
> set -e # exit if any command fails
> for branch in `branches_for_module $module`; do
> # Check out the latest commit in branch $branch
> git fetch
> git clean -x -d -f
> git reset --hard origin/$branch
>
> # Scripty tasks
> update_xml
> commit_desktop_changes
>
> # Get the latest changes to reduce the chances of push failing
> # Since HEAD points to origin/$branch, this pull will not create merges
> # If any of the .desktop files we've changed are also changed upstream,
> # pull will fail. If that happens, clean up and go on to the next branch
> git pull origin $branch || { git reset --hard; continue; }
>
> # Commit and push
> git commit -a -m "SVN_SILENT made messages (.desktop)"
> git push origin HEAD:$branch || true # ignore if it fails
> done
ahh, if only scripty were actually so clean that a simple continue; would work
;)
anyways, I mostly see what you mean now.
but my knowledge of git is still fuzzy... would this be no slower than
checking out the branches? would I still have to have tracking branches
created, to get a git fetch to actually download the files for the remote
branches I care about?
I want to be sure that git's not going to be redownloading all files on every
reset, or downloading branches I don't actually need, or anything.
--
This message brought to you by eevil bananas and the number 3.
www.chani3.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 197 bytes
Desc: This is a digitally signed message part.
Url : http://mail.kde.org/pipermail/kde-scm-interest/attachments/20090601/50d9462e/attachment.sig
More information about the Kde-scm-interest
mailing list