ZhangHui Li

CPU designer, Lisper, Smalltalker & Emacs maniac.

1_02_svn_git

Table of Contents

版本管理工具

git

git-the stupid content tracker,傻瓜内容跟踪器。与CVS和Subversion不同, 它采用分布式版本库的方式,不必服务器端软件的支持。

概念

branch

分支,不同工作环境

tree

所有的分支组成tree

path

工作目录文件

ref

与head一起指向branch

index

add /rm改写的工作目录文件index,是当前工作目录文件的一个索引。用于记录 工作文件。

repository

版本库

HEAD

ignored files

命令

git init

添加初始git版本库

git add

将文件加到本地目录索引中,之后再用commit命令添加到版本库中。

-n 不添加文件到index中,只是查看当前文件是否存在index中
-v  
-f  
-i  
-p  
-e  
-u  
-A  
-N  

git status

比较当前目录和版本库的文件状态。

git rm

与add对应,删除index中的记录。

git reset

版本库回归

git commit

将index文件提交版本库(repository)

git update index

index操作,内核命令,add由它翻译。

git branch

git树形结构的分支,可以有多个,这个命令对分支进行操作。

git checkout

  • 改变当前所在分支.
  • 下载版本库中文件.

git clone

clone 一个git版本库。

git diff

比较当前目录与版本库中文件内容的差别,以版本库为依据。

git log

git 版本库,本版更新记录。就是commit的记录。

git merge

合并分支

git mv

改写index中的文件名,并更新到工作目录。

git pull

将其他目录的版本跟新加到当前版本库

git push

将当前版本库追加到其他版本库

git fetch

下载其他版本库分支,到当前版本库的某一分支。

git show

比较最后一次的

git中文显示问题。

如git st时中文文件显示

\350\257\264\346\230\216.org

如果是UTF-8,则很好解决。

git config --global core.quotepath false

如果是gbk

git config --global i18n.logOutputEncodiing gbk
git config --global i18n.commitEncoding gbk

svn

svn back to previous version and commit as a new version

svn merge -r current_version:previous_version xxxx.file svn ci xxxx.file -m ""

create and start svn service

mkdir svnServeDir svnadmin create svnServeDir svnserve -d -r svnServeDir

svn权限控制

svn的权限控制结构:从conf/svnserve.conf文件出发,里面分为两部分:

  1. 按用户授权
  2. 按文件路径授权

这两部分可以分别延伸为一个文件,文件中可以细分。原则上这两个文件中的权 限内容不能与svnserve.conf中内容相冲突。权限只有read,write,none,其中 write是包括读的,权限最高 。 按用户授权有这么几项:anon-access(匿名用户的权限),auth-access(授权 用户权限),password-db(该变量指定的文件中存放授权用户的密码), authz-db(该变量指定的文件中存放按路径规定的权限),realm(权限作用域,暂 时还没弄清作用,试了一下,随便写一个都行)。

git与svn的对比

git是分布式的,svn是集中式的。所以

  • git可以不用建repository,而svn必须建仓库。因此git初始化有两种:
    • git init(本地)
    • git init –bare(remote)
  • git提交时,如果事先没有add操作的话,默认git commit是不会提交的。但是 git commit xxx指定文件是会提交的。而svn默认是提交所有的,如果只提交 一部分修改,必须svn ci xxx的方式,把需要提交的文件列出来。
  • git checkout实现了不用删除直接覆盖,svn 必须先rm才能update,不然就会 有冲突。
  • 如果只从版本提交修改,返回,的角度来说,svn和git没有什么太大区别。 git多出的强大功能:
    • 分支
    • stash
    • push/pull
  • .gitignore 也需要加入到repository中。git add .gitignore
  • git push -u /git push
  git svn
build repository git init mkdir svnAll/svnServeDir
  git init –bare svnadmin create svnServeDir
    svnserve -d -svnAll
switch version git reset –hard (HEAD^~/commit_id) svn update -r version/svn up
commit [fn:1] git add xx & git commit git commit -a git commit xx svn ci
cancle changes already added(git reset HEAD xx & git checkout – xx) rm xx & svn up
  without added(git checkout – xxx)  
remove git rm & git commit svn del & svn ci
add git add & git commit svn add & svn ci
customize git config –global user.mail/user.name  
  git config –global color.ui true  
  .gitignore  
  git config –global alias.co checkout [fn:2]  
remote git push/pull  
  git clone svn checkout