# HG changeset patch # User Oleksandr Gavenko # Date 1315413268 -10800 # Node ID a67767dffaf31b148198f415c93c19631a366ada # Parent 018e63c076ca148e1161e895403e8d19a7f46546 move some file to RST syntax diff -r 018e63c076ca -r a67767dffaf3 git.rst --- a/git.rst Wed Sep 07 18:11:05 2011 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,347 +0,0 @@ --*- mode: outline; coding: utf-8; -*- - -* Setup git. - -** Debian. - -For Etch Degian release use git-core package from backports, -old 1.4 version of git very dumb compared to new version 1.5. - - $ sudo apt-get install git-core - -After install setup some options: - - $ git config --global user.name "Oleksandr Gavenko" - $ git config --global user.mail "gavenkoa@gmail.com" - $ cat ~/.gitconfig -[user] - name = Oleksandr Gavenko - mail = gavenkoa@gmail.com - -** Windows. - -No official support for Windows OS. - -*** Cygwin. - - $ setup.exe -p git - -*** MSys. - -Native port. - - $ cat gitconfig -[core] -autocrlf = false -symlinks = false - - http://code.google.com/p/msysgit - -* git over proxy. - -Only http:// protocol support proxy (not git://). - - $ export http_proxy="http://username:password@proxy:port/" - $ git clone http://github.com/$user/$proj.git $proj - -You can store proxy settings under repository local config file: - - $ git config http.proxy http://$user:$passwd@$ip:$port - -* Start your project. - -Setup proj space on fs. - - $ mkdir proj - $ cd proj - $ git init -Initialized empty Git repository in /home/user/tmp/proj/.git/ - $ ls -a -. .. .git - -Add file, make changes, commit all. - - $ emacs Makefile -... C-x C-c - $ emacs app.c -... C-x C-c - $ git add Makefile app.c - $ git status -# On branch master -# -# Initial commit -# -# Changes to be committed: -# (use "git rm --cached ..." to unstage) -# -# new file: Makefile -# new file: app.c -# - -or just - - $ git add . - -Commit newlly added file: - - $ git commit -... Write message log ... -Created initial commit 2169263: My first commit massage. - 1 files changed, 4 insertions(+), 0 deletions(-) - create mode 100644 app.c - -* Undo tracking added file. - -You do - - $ git add badfile - $ git status -# On branch master -# Changes to be committed: -# (use "git reset HEAD ..." to unstage) -# -# new file: badfile -# - -To stop tracking badfile do - - $ git rm --cached badfile - $ git status -# On branch master -# Untracked files: -# (use "git add ..." to include in what will be committed) -# -# file -nothing added to commit but untracked files present (use "git add" to track) - -or - - $ git reset badfile - -* Doing changes. - - $ printf "clean:\nrm $(wildcard *.o)\n" >>Makefile - $ git diff -diff --git a/Makefile b/Makefile -index e84f7e9..cd2438a 100644 ---- a/Makefile -+++ b/Makefile -@@ -1,2 +1,5 @@ - all: - @echo XXX - exit 1 -+ -+clean: -+ rm -f *.o - $ git add Makefile - $ git commit -m "Added clean target." -Created commit 11272b9: Added clean target. - 1 files changed, 1 insertions(+), 0 deletions(-) - create mode 100644 file - -or just - - $ git commit -a -m "Added clean target." - -* git analog of 'hg incoming'. - -git does not directly support such feature. You can emulate it by: - - $ git fetch - $ git log master..origin/master # or just '..origin/master' - -By previous commands you grab changes from remote server! You can apply them: - - TODO - $ git merge - -* git analog of 'hg outgoing'. - -git does not directly support such feature. You can emulate it by: - - $ git fetch - $ git log origin/master..master # or just 'origin/master..' - -* Debug git network operation. - -Git uses libcurl for network operation. - - $ export GIT_CURL_VERBOSE=1 - $ git ... - -* Using git to work with SVN offline. - -Prepare SVN and git utilities: - - $ sudo apt-get svn git-core git-svn - -Making SVN repo - - $ cd $HOME/tmp - $ svnadmin create svn-repo - $ svn co file://$HOME/tmp/svn-repo svn-devel - $ cd svn-devel - $ mkdir tags trunk branches - $ svn add * -A branches -A tags -A trunk - $ cd trunk/ - $ printf "all:\n echo XXX\n" >Makefile - $ printf "int main() {return 0;}" >main.c - $ svn add * - $ cd .. - $ svn st -A trunk -A trunk/main.c -A trunk/Makefile -A branches -A tags - $ svn ci -m init -Adding branches -Adding tags -Adding trunk -Adding trunk/Makefile -Adding trunk/main.c -Transmitting file data .. - $ svn cp -m v0.0 file://$HOME/tmp/svn/trunk file://$HOME/tmp/svn/tags/v0.0 - $ svn cp -m v0.1 file://$HOME/tmp/svn/trunk file://$HOME/tmp/svn/branches/v0.1 - -Moving SVN changset to git repo - - $ cd $HOME/tmp - $ git svn init file://$HOME/tmp/svn git-repo - $ ls -a -. .. .git - $ git svn fetch - A trunk/main.c - A trunk/Makefile -W: +empty_dir: branches -W: +empty_dir: tags -r1 = 52ccd9882979dd53ec198dbac108783ec660410f (git-svn) - A tags/v0.0/main.c - A tags/v0.0/Makefile -r2 = 8ec8a772bb6f37ace56b3649066dc84e481ed427 (git-svn) - M trunk/Makefile -r3 = 2c169ff409ed504dd6a092b1e302beb3fd94871e (git-svn) - A branches/v0.1/main.c - A branches/v0.1/Makefile -r4 = e68d76f4ba6beea4b9059c1884c1f38ce10831a7 (git-svn) - M trunk/Makefile -r5 = cdde63974454b13ac53f2eeb201aa76c49fd875c (git-svn) -Checked out HEAD: - file:///home/sasha/tmp/svn r5 - -or (in old git version): - - $ git svn clone file://$HOME/tmp/svn git-repo - -Making changes in svn: - - $ cd $HOME/tmp/svn-devel/trunk - $ echo ".PHONY: clean" >>Makefile - $ svn ci -m "Added clean to phony." -Sending trunk/Makefile -Transmitting file data . -Committed revision 6. - -Making committed in git: - - $ cd $HOME/tmp/git-repo/trunk - $ echo ".PHONY: all" >>Makefile - $ echo "int foo(int x) {return x+x;}" >>main.c - $ git status -# On branch master -# Changed but not updated: -# (use "git add ..." to update what will be committed) -# -# modified: Makefile -# modified: main.c -# -no changes added to commit (use "git add" and/or "git commit -a") - $ git commit -a -m "Bug fixed." -Created commit 222d399: Bug fixed. - 2 files changed, 2 insertions(+), 0 deletions(-) - -Getting changes from SVN to git: - - $ git svn rebase - M trunk/Makefile -r6 = 8165e9bfb38e9df09a7313d19606ec227629b670 (git-svn) -First, rewinding head to replay your work on top of it... -Applying Bug fixed. -error: patch failed: trunk/Makefile:6 -error: trunk/Makefile: patch does not apply -Using index info to reconstruct a base tree... -Falling back to patching base and 3-way merge... -Auto-merged trunk/Makefile -CONFLICT (content): Merge conflict in trunk/Makefile -Failed to merge in the changes. -Patch failed at 0001. - -When you have resolved this problem run "git rebase --continue". -If you would prefer to skip this patch, instead run "git rebase --skip". -To restore the original branch and stop rebasing run "git rebase --abort". - -rebase refs/remotes/git-svn: command returned error: 1 - $ git add Makefile - $ git rebase --continue -Applying Bug fixed. - -and return all from git to SVN: - - $ git svn dcommit -Committing to file:///home/sasha/tmp/svn ... - M trunk/Makefile - M trunk/main.c -Committed r7 - M trunk/main.c - M trunk/Makefile -r7 = 68e782c8d06635f2db4dd69b9ca8599f99da22e2 (git-svn) -No changes between current HEAD and refs/remotes/git-svn -Resetting to the latest refs/remotes/git-svn - -See what going to SVN repo: - - $ cd $HOME/tmp/svn-devel/trunk - $ svn diff -r BASE:HEAD -Index: Makefile -=================================================================== ---- Makefile (working copy) -+++ Makefile (revision 7) -@@ -6,4 +6,4 @@ - .o: .c - $(CC) $(CFLAGS) -c -o $@ $< - --.PHONY: clean -+.PHONY: all clean -Index: main.c -=================================================================== ---- main.c (working copy) -+++ main.c (revision 7) -@@ -2,3 +2,4 @@ - { - return 0; - } -+int foo(int x) {return x+x;} - $ svn up -U Makefile -U main.c -Updated to revision 7. - -* gitk - -gitk - The git repository browser - -Installing: - - $ sudo apt-get instal gitk - -Using: - - $ cd /path/to/git-repo - $ gitk - -See - - gitk(1)