git-svn使用教程

来源:互联网 发布:mac os双系统安装教程 编辑:程序博客网 时间:2024/06/06 00:51

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种可能的动作:

    • nowarn

关闭错误提示

    • warn

输出部分错误提示,但完整的应用补丁,不会处理错误,这是默认动作。

    • fix

输出部分错误,修正错误后应用补丁

    • error

输出部分错误,拒绝应用补丁。

    • error-all

输出全部的错误,拒绝应用补丁。

 

查看某次提交的文件

git co hash-code (这会直接生成一个匿名分支,看完文件后直接git co other-branch,这个分支会自动删除)

原创粉丝点击