# HG changeset patch # User Oleksandr Gavenko # Date 1316771178 -10800 # Node ID 234cd58cae56ad61271f3f52f09fbd15e2cfd822 # Parent 4dd76ea12a6daefc10dc0f6aea4738d713f46ba6 Fix RTS syntax. diff -r 4dd76ea12a6d -r 234cd58cae56 git.rst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/git.rst Fri Sep 23 12:46:18 2011 +0300 @@ -0,0 +1,351 @@ +.. -*- coding: utf-8; -*- + +====== + Git. +====== + +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 + +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. See gitk(1). + +Installing:: + + $ sudo apt-get instal gitk + +Using:: + + $ cd /path/to/git-repo + $ gitk + diff -r 4dd76ea12a6d -r 234cd58cae56 ssh.rst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ssh.rst Fri Sep 23 12:46:18 2011 +0300 @@ -0,0 +1,116 @@ +-*- coding: utf-8 -*- + +=========== + SSH/sshd. +=========== + +Maintaining key pair. +===================== +:: + + $ ssh-keygen -t dsa # for DSA + $ ssh-keygen -t rsa # for RSA + $ ssh-keygen -t dsa -C comment # put own comment instead user@host + $ ssh-keygen -t dsa -f my_dsa_key # store priv key under my_dsa_key + # and pub key under my_dsa_key.pub + + $ ssh-keygen -y -f my_dsa_key # recover pub key from priv + + $ ssh-keygen -p -N "newphrase" -P "oldphrase" -f ~/.ssh/id_dsa + # change passphrase of priv key + + $ ssh $user@$host cat ">>" "~/.ssh/authorized_keys" <~/.ssh/id_rsa.pub + # public pub key on remote host + +Shell login. +============ +:: + + $ ssh $user@$host + $ ssh $user@$host:$port + + $ ssh -i ~/.ssh/my_dsa_key $user@$host + +or:: + + $ ssh -l $user $host + $ ssh -l $user $host:$port + +X session. +========== +:: + + $ ssh -X $user@$host + +Multiply private keys. +====================== + +ssh try use all listen keys:: + + $ ssh -i ./priv1 -i ./priv2 $user@$host + +or place in ~/.ssh/config:: + + Host * + IdentityFile ~/.ssh/identity # standard search path for protocol ver. 1 + IdentityFile ~/.ssh/id_dsa # standard search path for RSA key protocol ver. 2 + IdentityFile ~/.ssh/id_rsa # standard search path for DSA key protocol ver. 2 + IdentityFile ~/.ssh/my_dsa + IdentityFile ~/.ssh/another_dsa + +or per host private key:: + + Host host1 # alias, that user provide at CLI + HostName host1.example.com # real host name to log into + User iam + IdentifyFile ~/.ssh/iam_priv_dsa + Host host2 # alias, that user provide at CLI + HostName 192.168.1.2 # real host IP to log into + User admin + IdentifyFile ~/.ssh/admin_priv_dsa + +Installing sshd on Cygwin. +========================== + + * Install base packages and openssh. + * Set CYGWIN env var to 'binmode tty ntsec'. + * Create Windows user. + * Recreate /etc/passwd:: + $ mkpasswd -l -u user >>/etc/passwd + or:: + $ mkpasswd -l >/etc/passwd + + * Register sshd:: + $ mkdir -p /home/user + $ ssh-host-config -y + * Start:: + $ net start sshd + or:: + $ cygrunsrv -S sshd + + * Check from remote host:: + $ ssh $gygwin_host -l user + +To stop service use:: + + $ net stop sshd + +or:: + + $ cygrunsrv -E sshd + +Запускаем SSH server на правах произвольного пользователя. +---------------------------------------------------------- + + * Создаем пользователя, например с именем user, задаем ему пароль, + права (т.е. в какие группы будет входить) и т.д., пользователя не блокируем. + * В консоле MMC добавляем оснастку "Параметры безопасности.". Модифицируем параметры: + + "Параметры безопасности."->"Локальные политики."->"Назначение прав пользователя." + ->"Вход в качестве службы."->добавить 'user'. + + "Параметры безопасности."->"Локальные политики."->"Назначение прав пользователя." + ->"Отклонить локальный вход."->удалить 'user' (если был установлен). + + XXX "Принудительное удаленнон завершение." + diff -r 4dd76ea12a6d -r 234cd58cae56 x.rst --- a/x.rst Mon Sep 19 23:31:41 2011 +0300 +++ b/x.rst Fri Sep 23 12:46:18 2011 +0300 @@ -77,10 +77,8 @@ '-name' option. This element is optional (can be substituated with wildcard). restriction - Class names or name of specific class instance. The classes names conventionally start with an upper-case letter. - resource The name of the resource whose value is to be changed. Resources are typically lowercase with uppercase