(svn、git)CVS版本控制系统

git和svn区别

svn

git

000.流程图

git图解

(1)

绿色的5位字符表示提交的ID,分别指向父节点。分支用橘色显示,分别指向特定的提交。当前分支由附在其上的HEAD标识。 这张图片里显示最后5次提交,ed489是最新提交。 master分支指向此次提交,另一个maint分支指向祖父提交节点。

(2)diff

git的配置

git config -1 #列举所有配置

git init

git add *.java

git clone url

git status

git diff

git commit

git commit -a -m "跳过使用暂存区域"

git rm XXX

git mv file_from file_to

git log

git commit --amend

git revert HEAD XX

git checkout -- XX

git remote

git remote add [shortname] [url]

git fetch [remote-name]

git pull会自动抓取数据下来,并自动合并到当前分支

git push [remote-name] [branch-name]

git remote show [remote-name]

git remote rename file_old file_new

git remote rm [remote-name]

git branch testing

git checkout testing

git checkout -b [new-branch]

git和svn区别

 

git

svn

分布式

是分布式的,没有网络时依然可

以提交文件,查看历史记录

不是分布式的

   
   

svn

对于已提交的代码撤销操作:

这种情况下,有多种办法可以进行撤销修改。一般我们推荐用svn merge来达成目的。 

  典型的操作过程如下: 

  1、保证我们拿到的是最新代码: 

     svn update 

     假设是28版本。 

  2、然后找出要移除的确切版本: 

     svn log contacts.Java 

    根据log怀疑是27版本改坏的,比较一下: 

     svn diff -r 26:27 contacts.java 

    发现果真是27版本坏事。 

  3、撤销27版本的改动: 

      svn merge -r 27:26 contacts.java 

    为了保险起见,再次确认合并的结果: 

      svn diff contacts.java 

    发现已正确撤销了改动,提交。 

  4、提交改动 

    svn commit -m "Revert wrong change from r27" 

    提交后版本变成了29。 

git

000.流程图

git图解

(1)

绿色的5位字符表示提交的ID,分别指向父节点。分支用橘色显示,分别指向特定的提交。当前分支由附在其上的HEAD标识。 这张图片里显示最后5次提交,ed489是最新提交。 master分支指向此次提交,另一个maint分支指向祖父提交节点。

(2)diff

(3)commit

提交时,git用暂存区域的文件创建一个新的提交,并把此时的节点设为父节点。然后把当前分支指向新的提交节点。下图中,当前分支是master。 在运行命令之前,master指向ed489,提交后,master指向新的节点f0cec并以ed489作为父节点。

git的配置

git config --global user.name "robbin"

git config --global user.email "fankai#gmail.com"

git config --global color.ui true

git config --global alias.co checkout

git config --global alias.ci commit

git config --global alias.st status

git config --global alias.br branch

git config --global core.editor "mate -w" # 设置Editor使用textmate

git config -1 #列举所有配置

001.开始git管理,会生成.git文件夹

git init

002.将某些文件纳入git管理

git add *.java

git commit -m "纳入版本控制"

003.克隆仓库,git使用clone,svn使用checkout

git clone url

克隆的时候自己新建项目的名称,末尾加上名称即可

git clone url 新建项目的名称

004.至此我们手上已经有了一个真实项目的git仓库,工作目录下的所有文件只有两种状态:已跟踪、未跟踪;在上次快照中有记录的为已跟踪,可以是已修改或未修改,clone下的所有文件都是已跟踪状态;

005.检查当前文件的状态

git status

006.跟踪文件,即将文件纳入版本管理,把目标文件快照放入暂存区域

git add XXX.java

007.此时已处于暂存状态,此时commit,该文件的版本将被留在历史记录中

008.忽略某些文件,有些文件无需纳入git管理,也不需要出现在未跟踪文件中,可以创建.gitignore文件,一开始就养成设置.gitignore的文件习惯,避免提交无用的文件

.gitignore文件的规范格式如下:

  1. 所有空行或者以注释符号#开头的都会被git忽略
  2. 可以使用标准的 glob 模式匹配。 * 匹配模式最后跟反斜杠(/)说明要忽略的是目录。 * 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反
  3. 所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。星号(*)匹配零个或多个任意字符;[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);问号(?)只匹配一个任意字符;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0-9] 表示匹配所有 0 到 9 的数字)

009.查看修改了文件的哪些内容,比较的是当前文件和暂存区域快照之间的区别,即没有暂存起来的改动,add表示暂存了

git diff

如果需要查看已暂存区域的文件和上次提交的快照之间的差异

git diff --cached

010.提交更新,暂存区域可以提交了,之前先git status看是否都暂存起来了,是否有遗漏

git commit

这种方式会启动文本编辑器来输入本次提交的说明,使用git config --global core.editor 命令设定你喜欢的编辑软件

git commit -m "说明文字"

会显示在哪个分支提交的(master)

注意:提交的是放在暂存区域的快照,即add之后的,每次提交,都是对项目做一次快照,以后可以回到这个状态或者进行比较

011.跳过add直接提交,commit后加-a,即跳过暂存区域,直接commit快照

git commit -a -m "跳过使用暂存区域"

012.移除文件,即从暂存区域移除文件,然后提交

git rm XXX

git commit

如果删除之前修改过并且已放到暂存区(add),则需要强制删除,加-f,force的首字母

git rm -f XXX

git commit

删除暂存区域的文件,但本地文件不删除,后续加入.gitignore文件,如误提交了日志文件

git rm --cached XX

git commit

013.移动文件,或者给文件改名

git mv file_from file_to

mv相当于执行了下边三条语句

mv file_from file_to

git rm file_from

git add file_to

014.查看提交历史

git log

默认不加参数,按时间排序,最新的排在最上边

git log -p -2

p列出每次提交的差异,-2仅显示最近两次的更新

git log --pretty=oneline

--pretty显示格式,oneline表示将每次提交放在一行显示,还有short、full、fuller

git log --pretty=format:"%h - %an, %ar : %s"

定制要显示的输出格式

表 2-1 列出了常用的格式占位符写法及其代表的意义。

Shell

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

选项 说明

%H 提交对象(commit)的完整哈希字串

 

%h 提交对象的简短哈希字串

 

%T 树对象(tree)的完整哈希字串

 

%t 树对象的简短哈希字串

 

%P 父对象(parent)的完整哈希字串

 

%p 父对象的简短哈希字串

 

%an 作者(author)的名字

 

%ae 作者的电子邮件地址

 

%ad 作者修订日期(可以用 -date= 选项定制格式)

 

%ar 作者修订日期,按多久以前的方式显示

 

%cn 提交者(committer)的名字

 

%ce 提交者的电子邮件地址

 

%cd 提交日期

 

%cr 提交日期,按多久以前的方式显示

 

%s 提交说明

015.撤销操作

修改最后一次提交

git commit --amend

如果刚才提交后没有任何改动执行此命令,可以修改提交说明,会覆盖上次提交,仅显示一次

$ git commit -m 'initial commit'

$ git add forgotten_file

$ git commit --amend

上面3条漏了文件,只显示一次提交

016.取消已经暂存的文件,git add之后取消操作,git status后有显示命令

git revert HEAD XX

取消对文件的修改,刚才的修改没有必要,git status有提示

git checkout -- XX

017.查看当前的远程库

git remote

可以查看当前配置有哪些远程库,会列出每个远程库的简短名字

git remote -v

可以显示对应的克隆地址

018.添加远程仓库,可以指定一个简单的名字,以便使用

git remote add [shortname] [url]

019.从远程仓库抓取数据(常使用git pull)

git fetch [remote-name]

会从远程仓库中拉取所有你本地仓库中还没有的数据,运行完成后,你就可以在本地访问该远程仓库中的所有分支;

如果是克隆了一个仓库,此命令会自动将远程仓库归于 origin 名下。所以,git fetch origin 会抓取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新)。

git fetch只是将远程数据拉到本地仓库,并不会自动合并到当前工作分支,只能手工合并

git pull会自动抓取数据下来,并自动合并到当前分支

020.推送数据到远程仓库

git push [remote-name] [branch-name]

将本地的master分支推送到origin服务器上(克隆操作会自动使用默认的origin和master)

021.查看远程仓库信息

git remote show [remote-name]

022.远程仓库的删除和重命名

git remote rename file_old file_new

git remote

移除和删除

git remote rm [remote-name]

git remote

023.创建分支,如新建testing分支

git branch testing

024.切换分支

git checkout testing

025.分支的新建和切换

git checkout -b [new-branch]

相当于

git branch [new-branch]

git checkout [new-branch]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值