1. 下载一份代码
git svn clone **** --username=***
2. 查看log
git log (git svn log -v 可以显示每次修改提交的文件)
git log -p (可以查看每次提交log和对应的修改内容)
git log --stat (可以查看每次提交log和对应的修改文件)
3. 查看某人的log
git log --author=***
4. 撤销工作区的修改
git checkout -- file
注:如果没有--,表示切换到某个分支。
5. 撤销暂存区的修改
git reset --hard HEAD file
6. 与远端同步
git svn rebase
7. 将修改提交到svn
git svn dcommit
8. 查看状态
git status
9. 显示分支情况
git branch -a
10. 新建分支
git branch new-branch-name (git checkout -b new_branch(新建分支并跳转到分支))
11. 删除分支
git branch -d new_branch (删除分支时,不可处于当前分支)
基本使用的流程
安装
yun -y install git-svn
配置
安装完毕后要做一些简单的配置。最直接的做法就是创建修改~/.gitconfig。
[user]
name =
email =
[color]
diff = auto
status = auto
branch = auto
[alias]
st = status
rb = svn rebase
ci = commit -a
co = checkout
[core]
editor = /usr/bin/vim
[user]部分标示出使用者的身份,你提交的代码会自动引用这一身份信息。
[color]设置命令输出的颜色。
[alias]部分可以简化一些常用命令,比如在这里将git status简化为git st。
接下来,需要配置忽略文件,让git忽略一些目录中不希望加入代码库的文件,类似svn propset svn:ignore。全局有效的忽略文件列表可以添加在./.git/info/exclude文件中。比如需要忽略所有vi产生的swp文件:
.*.swp
对于和目录有关的忽略文件设置可以在该目录下创建.gitignore,然后加入需要忽略的内容,比如我希望忽略根目录下的log,tmp等目录,可以直接在根目录下的.gitignore中加入:
log
tmp
使用git-svn
1. 下载svn工程
git svn clone svn-repository-url
这个命令时间比较长,因为需要同步所有的提交历史,仅此一次,以后不会这么慢了。做完这一步,在本地就有了一个完整的代码库,包括所有commit的历史和log,已经可以开始用它来进行开发工作了。
注:
不过,在开始开发之前,最好先做一次垃圾搜集:
git gc
它是对代码库的信息进行垃圾搜集和压缩,最明显的作用就是减小磁盘占用空间。第一次做效果尤其明显。
2. 新建本地分支
用git后开始养成一个新习惯,就是工作前先创建新分支:
git checkout -b new_branch
-b后是分支名,创建的同时,你要转到了新分支上。尽量保持master上没有未提交到svn的commit,这样随时都可以很容易的产生一个干净的分支。
(删除分支git branch -d branch_name,且不可以在将要被删除的分支下执行)
3. 查看修改
接下来你可以写代码,修改文件或者添加文件。如果想看看修改了什么,可以用:
git diff (显示工作区与暂存区的修改)
如果对某个修改不满意,希望恢复原状,可以使用:
git checkout -- path/filename(该命令只会丢弃工作区的修改)
相当于svn revert
git diff --cached (显示暂存区与版本库的区别)
丢弃暂存区的修改
Git reset HEAD file
4. 提交到分支
git引入一个索引(index)的概念,提交前,需要把要提交的文件加入到git索引(index)中:
添加到暂存区
git add path/filename1
git add path/filename2
...
从缓冲区删除
git reset HEAD readme.txt
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
然后提交
git commit -m "提交感言"
每次commit都是提交索引(index)中的内容。
如果要一次提交所有修改过的文件,可以一次性添加,然后提交
git add .
git checkout . 放弃所有的工作区修改
git commit -m "提交感言"
如果只是修改,并没有添加新文件,可以直接用下面的命令:
git commit -a -m "提交感言"
将被修改文件加入索引并提交,一次完成全过程。
在修改加入所索引后,如果想看看索引内容中都所了什么修改,可以用:
git diff --cached
适合在提交前做最后的code review。
取消上一次提交(文件会回退上次提交之前,但会新加一条log)
git revert HEAD
删除前面两次提交
git reset --hard HEAD~~
查看最近一次提交的内容,可以使用
git show (hash-code filename)
修改中随时查看当前代码库的状态:
git status
相当于svn status
5. 提交到svn
1. 为了方便解决冲突问题,首先将本分支当中的修改保存在git栈中
git stash
2. 让当前分支和远程svn同步:
git svn rebase (类似于svn up)
3. 再将本地的修改从栈中弹出
git stash apply
4. 如果有冲突
冲突示例:
<<<<<<< Updated upstream
#xyj2
=======
#xyj
#xyj1
>>>>>>> Stashed changes
说明:
<<<<<<< Updated upstream
#xyj2
以上显示的是svn上面的当前的状态
#xyj
#xyj1
>>>>>>> Stashed changes
以上显示的是本地分支的当前状态
两个版本有冲突,直接手动修改以上提示的冲突即可。修改完毕一定要提交到分支,否则切换不到主分支(master)。
切换到主分支
当前分支是master
$ git checkout master(切换分支)
把刚刚修改的分支中的内容Merge进来:
$ git merge new_branch(将分支new_branch合并到master分支)
然后将所有已经合并到master分支的本地修改提交到svn
git svn dcommit
如查代码已经commit, 但是想对此次提交进行修改
git commit --amend, 如果没有修改文件,就是修改上次提交的log,
如果修改了文件,并且git add file,则即修改文件,又提修改了上次提交的log。
如果想放弃上一次的提交
git revert HEAD,该条命令会取消上一次的提交,并且会添加一个新的log。
git reset HEAD~ 取消上次的提交
git reset ORIG_HEAD 恢复上次的提交
git rebase -i HEAD~~ ,将最后行的pick改为s,即可以合并前两次的提交
Patch的使用
生成patch
git diff > patch_file
使用patch
git apply patch_file
git apply应用补丁时会检测空白错误,默认情况下,尾部空白,包含空白的空行,初始tab缩进之后紧跟的空白字符会被认为是错误。
处理这个错误的行为由命令行参数--whitespace
或者core.whitespace配置来控制,共有5种可能的动作:
关闭错误提示
输出部分错误提示,但完整的应用补丁,不会处理错误,这是默认动作。
输出部分错误,修正错误后应用补丁
输出部分错误,拒绝应用补丁。
输出全部的错误,拒绝应用补丁。
查看某次提交的文件
git co hash-code (这会直接生成一个匿名分支,看完文件后直接git co other-branch,这个分支会自动删除)