-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Am Mittwoch, 3. September 2008 schrieb Jean-Charles Malahieude:
I do all my "traffic" (translating and building) in Traduc, where I do a
"git pull" quite often as you have noticed. Once I'm ready, I do:
cd ..
git branch (to be sure I'm on the right one)
I do a "git status" instead... It also shows the branch, but also shows
which
files were not yet
git checkout lilypond/translation (if necessary)
git pull trans (shorthand for "lilypond/translation")
cd Traduc
git pull
This creates a merge commit if you have done a local commit before, which
was
not yet pushed to the server. The order of the patches in git is now:
- -) old lilypond/translation status
- -) your local commit
- -) merge commit, merging in changes to lilypond/translation from the
server
git fsck
git gc (and then if nothing seems wrong)
both not needed
git-status and commit (within emacs)
git format-patch origin
Not needed
Before pushing, you should now do:
git rebase origin/lilypond/translation
This takes your previous local commit(s), removes it from before the merge
commit and instead appends it after the current lilypond/translation
branch
on the server. The new order of the commits will then be:
- -) old lilypond/translation status
- -) new lilypond/translation status from the server
- -) your previous local commit
As you can see, the merge commit created by the pull will be removed and
the
order of the patches will be as if you did that commit now rather than a
while ago.
You can do this also if you have several local commits.
git push
This simply copies your local structure to the server. If you have lots of
merge commits locally already, you should try to rebase before pushing.
I usually take a look at the structure of the commit tree with qgit before
pushing and try to resolve things before pushing.
When I'm working on a feature / translation, the sequence of commands I
use is
as follos. Here I'm assuming, I have already done some local changes and
committed them locally, so a pull would create a merge commit. If there
were
no previous local commits, which are not yet pushed to the server, I do a
merge instead of the rebase (although a rebase works just as well):
git fetch -- only download changes from the server, don't merge
in
git rebase origin/branch/on/server -- moves local commit to the very
end
(the rebase also updates your local checkout to the latest version
from
the server, plus your local commit)
(doing some local changes, finishing a section of the translation,
etc.)
git status -- to see what I have changed.
(Now I'm doing either:)
git commit -a -- commits all my changes as a new commit
(or:)
git commit --amend -a -- adds my changes to my previous patch
(of course, if I want to commit only particular files, I don't use -a,
but list only those files instead)
(Just to be sure, I do a:)
git fetch -- downloads possible changes in the meantime on the
server
(if there were changes, I have to rebase again:)
git rebase origin/branch/on/server
(I can now safely do a)
git push origin branch/on/server
Some other useful git commands (not necessarily to "fix" the problems from
above, but I find them usefull in many cases and it took me a while to
figure
out some):
- -) "git reset --hard origin/lilypond/translation" -- resets all local
commits,
your local copy will be exactly what is on the server. You can then apply
patches you have created before.
- -) "git am your_patch.patch" -- apply a patch you created before / was
mailed
to you. This is useful after a reset --hard. I usually use qgit to apply
patches rather than the command line, though.
- -) "git checkout filename" -- discards all non-committed changes to the
file.
- -) "git fetch" -- just downloads the changes from the server and stores
them
locally, but does not apply them to the files you see. After that you can
do "git rebase origin/branch/on/server " or "git merge
origin/branch/on/server" (the difference between merge and pull is that
pull
download the status from the server and then tries to merge, while merge
takes what was downloade before by a git fetch and merges that)
- -) "git commit --amend files" -- Adds the changes to the files to your
previous commit rather than creating a new commit. I use this e.g. when I
forgot to change the committish. This should only be used before you push
to
the server.
- -) "git add -p" -- Goes through all your not-yet-committed changes to
your
files and asks you for each change wheter you want to commit it. After
that
do a "git commit", which will create a commit for only the selected
changes.
All other changes will of course remain in your files as non-commited
changes. This is useful if you work on more than one thing at the same
time.
Cheers,
Reinhold
- --
- ------------------------------------------------------------------
Reinhold Kainhofer, Vienna University of Technology, Austria
email: [EMAIL PROTECTED], http://reinhold.kainhofer.com/
* Financial and Actuarial Mathematics, TU Wien,
http://www.fam.tuwien.ac.at/
* K Desktop Environment, http://www.kde.org, KOrganizer maintainer
* Chorvereinigung "Jung-Wien", http://www.jung-wien.at/
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
iD8DBQFIvxkLTqjEwhXvPN0RAosXAJ9i8e/HLTIQg282aW2Tp/57IPXL7wCfYMno
N/nu1qtN9A9Q7/gJqPZ9ACo=
=ldBT
-----END PGP SIGNATURE-----
_______________________________________________
lilypond-devel mailing list
lilypond-devel@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-devel