Linux | c&cpp | Email | github | QQ群:425043908 关注本站

itarticle.cc

您现在的位置是:网站首页 -> Linux 文章内容

linux svn,git命令-itarticl.cc-IT技术类文章记录&分享

发布时间: 9年前Linux 124人已围观返回

1、 将文件checkout到本地目录

svn checkout path(服务器目录) localpath(本地目录) 例如:svn checkout svn: // 192.168 . 1.1 / pro / domain ./ 简写:svn co


2、 往版本库中添加新的文件

svn add file 例如:svn add test.php(添加test.php) svn add * .php(添加当前目录下所有的php文件)

svn add path 当添加一个目录,svn add缺省的行为方式是递归的,即添加这个目录下的所有文件


3、 将改动的文件提交到版本库

svn commit -m “ LogMessage “ [ -N ] [ --no-unlock ] PATH (如果选择了保持锁,就使用–no-unlock开关) 例如:svn commit -m “ add test file for my test “ test.php 简写:svn ci


4、 加锁/解锁

svn lock -m “ LockMessage “ [ --force ] PATH 例如:svn lock -m “ lock test file “ test.php

svn unlock PATH


5、 更新到某个版本

svn update -r m path 例如: svn update如果后面没有目录,默认将当前目录以及子目录下的所有文件都更新到最新版本。 svn update -r 200 test.php(将版本库中的文件test.php还原到版本200) svn update test.php(更新,于版本库同步。如果在提交的时候提示过期的话,是因为冲突,需要先update,修改文件 ,然后清除svn resolved ,最后再提交commit) 简写:svn up


6、 查看文件或者目录状态

1 )svn status path (目录下的文件和子目录的状态,正常状态不显示)

【?:不在svn的控制中;M:内容被修改;C:发生冲突;A:预定加入到版本库;K:被锁定】

2 )svn status -v path (显示文件和子目录状态)

第一列保持相同,第二列显示工作版本号,第三和第四列显示最后一次修改的版本号和修改人。 注:svn status、svn diff和 svn revert这三条命令在没有网络的情况下也可以执行的,原因是svn在本地的.svn中保留了本地版本的原始拷贝。 简写:svn st


7、 删除文件

svn delete path -m “ delete test fle “ 例如:svn delete svn:// 192.168.1.1 /pro/domain/test.php -m “ delete test file ”或者直接svn delete test.php 然后再svn ci -m ‘delete test file‘,推荐使用这种 简写:svn (del, remove, rm)


8、 查看日志

svn log path 例如:svn log test.php 显示这个文件的所有修改记录,及其版本号的变化

svn log -v --limit 4 日志的详细模式,如下所示

------------------------------------------------------------------------

r58687 | mr_x | 2012-04-02 15:31:31 +0200 (Mon, 02 Apr 2012) | 1 line Changed

paths:

A/trunk/java/App/src/database/support

A/trunk/java/App/src/database/support/MIGRATE

A/trunk/java/App/src/database/support/MIGRATE/remove_device.sql

D/trunk/java/App/src/code/test.xml


9、 查看文件详细信息

svn info path 例如:svn info test.php


10、 比较差异

svn diff path(将修改的文件与基础版本比较) 例如:svn diff test.php svn diff -r m:n path(对版本m和版本n比较差异) 例如:svn diff -r 200:201 test.php 简写:svn di


11、 将两个版本之间的差异合并到当前文件

svn merge -r m:n path 例如:svn merge -r 200 : 205 test.php(将版本200与205之间的差异合并到当前文件,但是一般都会产生冲突,需要处理一下)


12、 SVN 帮助

svn help svn help ci


13、 版本库下的文件和目录列表

svn list path 显示path目录下的所有属于版本库的文件和目录 简写:svn ls


14、 创建纳入版本控制下的新目录

svn mkdir : 创建纳入版本控制下的新目录。 用法:

1、mkdir PATH…

(每一个以工作副本 PATH 指定的目录,都会创建在本地端,并且加入新增调度,以待下一次的提交。)

2、mkdir URL…

(每个以URL指定的目录,都会透过立即提交于仓库中创建。)

在这两个情况下,所有的中间目录都必须事先存在。


15、 恢复本地修改

svn revert : 恢复原始未改变的工作副本文件 (恢复大部份的本地修改)。revert: 用法: revert PATH… 注意: 本子命令不会存取网络,并且会解除冲突的状况。但是它不会恢复被删除的目录


16、 代码库URL变更

svn switch (sw): 更新工作副本至不同的URL。 用法:

1、switch URL [PATH]

(更新你的工作副本,映射到一个新的URL,其行为跟“svn update”很像,也会将服务器上文件与本地文件合并。这是将工作副本对应到同一仓库中某个分支或者标记的方法。)

2、switch –relocate FROM TO [PATH...]

(改写工作副本的URL元数据,以反映单纯的URL上的改变。当仓库的根URL变动(比如方案名或是主机名称变动),但是工作副本仍旧对映到同一仓库的同一目录时使用这个命令更新工作副本与仓库的对应关系。)


17、 解决冲突

svn resolved: 移除工作副本的目录或文件的“冲突”状态。 用法: resolved PATH… 注意: 本子命令不会依语法来解决冲突或是移除冲突标记;它只是移除冲突的相关文件,然后让 PATH 可以再次提交。


18、 输出指定文件或URL的内容。

svn cat 目标[@版本]…如果指定了版本,将从指定的版本开始查找。 svn cat -r PREV filename > filename (PREV 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)



一.git文件状态变化


Untracked UnModified Modified Staged

| | | |

|---Add the file -------------------------------------------->|

| | | |

| |---Edit the file--->| |

| | | |

| | |--Stage the file->|

| | | |

|<--Remove the file---| | |

| | | |

| |<-----------------------------Commit---|

| | | |

状态说明:

Untracked: 刚新加的文件,还没有纳入git管理范围

UnModified: 已经committed的文件

Modified: 已经committed的文件,通过vi等修改后,就变成Modified

Staged: git add 后的文件


状态转换:

Untracked->Staged: 通过git add 来完成

UnModified->Modified: 修改文件内容来完成,比如vi命令

Modified->Staged: 通过git add 来完成

UnModified->Untracked: 通过git rm 来完成

Staged->UnModified: 通过git commit 来完成


二.正常流程


2.1 git clone 从远程拉一个工程下来

#git clone git@github.com:sotrip/gittest.git

Cloning into 'gittest'...

warning: You appear to have cloned an empty repository.

Checking connectivity... done.


2.2 增加一个文件

#vi 1.txt 里面内容如下:

the first line


2.3 git status 查看状态

#git status

On branch master //表示我们目前在master分支上

Initial commit

Untracked files: //有哪些文件是Untracked状态,有1.txt

(use "git add ..." to include in what will be committed)

1.txt

nothing added to commit but untracked files present (use "git add" to track)


2.4 git add 把文件从Untracked-->Staged

#git add 1.txt 成功后,没有输出

#git status 再次查看

On branch master

Initial commit

Changes to be committed: //表示1.txt已经是staged了,可以被提交了

(use "git rm --cached ..." to unstage) //如果不想提交了,可以用git rm --cached 1.txt

new file: 1.txt


2.5 git rm --cached 文件已经是staged了,但想要退回原来的状态

#git rm --cached 1.txt

rm '1.txt'


#git status 再来看又回来2.3这一步了

On branch master

Initial commit

Untracked files:

(use "git add ..." to include in what will be committed)

1.txt


#git add 1.txt 我们还是再加上

#git status

On branch master

Initial commit

Changes to be committed: //1.txt 又改为staged状态 准备提交

(use "git rm --cached ..." to unstage)

new file: 1.txt


2.6 git commit 提交

#git commit -m "first commit" //-m后面是我们这一次提交的注释

[master (root-commit) e6b0e7d] first commit

1 file changed, 1 insertion(+)

create mode 100644 1.txt



2.7 git push 把master分支的内容提交到远端

#git push origin master

Warning: Permanently added the RSA host key for IP address '*.*.*.*' to the list of known hosts.

Counting objects: 3, done.

Writing objects: 100% (3/3), 214 bytes | 0 bytes/s, done.

Total 3 (delta 0), reused 0 (delta 0)

To git@github.com:sotrip/gittest.git

* [new branch] master -> master


三.git diff 查看变化

命令概括

#git diff 查看 Modified的文件,做了哪些修改

#git diff --staged 查看 Staged的文件,做了哪些修改


操作实例

#vi 1.txt 在后面增加一行,变成如下

the first line

the second line


#git status

On branch master

Your branch is up-to-date with 'origin/master'.

Changes not staged for commit: //这个表示1.txt已经变为Modified了,not staged

(use "git add ..." to update what will be committed)

(use "git checkout -- ..." to discard changes in working directory)

modified: 1.txt

no changes added to commit (use "git add" and/or "git commit -a")


#git diff 查看Modified的文件,修改了哪些地方

diff --git a/1.txt b/1.txt

index 137b7fd..067030b 100644

--- a/1.txt

+++ b/1.txt

@@ -1 +1,2 @@

the first line

+the second line


#git add 1.txt //把1.txt加入到staged中

#git status

On branch master

Your branch is up-to-date with 'origin/master'.

Changes to be committed:

(use "git reset HEAD ..." to unstage)

modified: 1.txt


#git diff 这个时候不会输出任何东西,因为没有Modified的文件了

#git diff --staged //查看staged的文件和上一次commit有哪些修改

diff --git a/1.txt b/1.txt

index 137b7fd..067030b 100644

--- a/1.txt

+++ b/1.txt

@@ -1 +1,2 @@

the first line

+the second line


四.回滚还没有commit的文件

命令概括

#git reset HEAD 1.txt //文件已经Staged的了,用这个来回滚到Modified状态,但是内容不会回滚

#git checkout 1.txt //如果文件是Modified,不想做修改了,恢复原样,使用这个


操作实例

#git status

On branch master

Your branch is up-to-date with 'origin/master'.

Changes to be committed:

(use "git reset HEAD ..." to unstage)

modified: 1.txt


#git diff --staged

diff --git a/1.txt b/1.txt

index 137b7fd..067030b 100644

--- a/1.txt

+++ b/1.txt

@@ -1 +1,2 @@

the first line

+the second line


#git reset HEAD 1.txt //把1.txt 的状态由Staged变为Staged, 但是1.txt的内容不会变

Unstaged changes after reset:

M 1.txt


#git status

On branch master

Your branch is up-to-date with 'origin/master'.

Changes not staged for commit: //可以看出1.txt 由Staged变为Modified

(use "git add ..." to update what will be committed)

(use "git checkout -- ..." to discard changes in working directory)

modified: 1.txt

no changes added to commit (use "git add" and/or "git commit -a")


#cat 1.txt //查看内容,发现 1.txt的内容并没有回滚

the first line

the second line


#git checkout 1.txt //回滚

#git status

On branch master

Your branch is up-to-date with 'origin/master'.

nothing to commit, working directory clean


#cat 1.txt //内容已经回滚

the first line


五.回滚某个提交

命令概括

#git revert HEAD //回滚上一次提交

#git revert HEAD^ //回滚上上次提交

#git revert #commit no# //回滚某一次提交


操作实例

增加了2.txt 并提交了,现在想回滚

#vi 2.txt 在里面增加内容

#git add 2.txt 把文件由Untracked 变为 Staged

#git commit -m "2.txt commit" 提交


#git log 查看提交日志

commit 710c5e84bd02e5d041b537b8732b9e80fee257a1 //这个是我们2.txt的提交

Author: jingbo

Date: Thu Apr 7 22:10:00 2016 +0800

2.txt commit

commit e6b0e7d844154d5473a37baed2ef56807dca16b3

Author: jingbo

Date: Wed Apr 6 22:42:44 2016 +0800

first commit


#git revert 710c5e84bd02e5d041b537b8732b9e80fee257a1 //回滚提交

[master d3ab103] Revert "2.txt commit"

1 file changed, 1 deletion(-)

delete mode 100644 2.txt


六.分支操作

6.1 查看分支

#git branch //查看目前有哪些分支

* master //只有一个分支,"*"表示当前是在master分支上


6.2 创建分支

#git branch first-branch //打出第一个分支,名字是first-branch

#git branch

first-branch //分支已经有了

* master //"*"表示当前是在master分支上


#git checkout first-branch

Switched to branch 'first-branch'


#git branch

* first-branch //已经成功切换到自己打的分支上了

master


6.3 分支上增加内容

#vi 2.txt

#cat 2.txt //增加的内容如下

edit in first-branch


#git add 2.txt

#git commit -m "2.txt commit in first-branch" //在分支上提交

[first-branch 9abd8f2] 2.txt commit in first-branch

1 file changed, 2 insertions(+)

create mode 100644 2.txt


6.4 推送分支到远程

#git push origin first-branch

Counting objects: 7, done.

Delta compression using up to 4 threads.

Compressing objects: 100% (5/5), done.

Writing objects: 100% (7/7), 692 bytes | 0 bytes/s, done.

Total 7 (delta 0), reused 0 (delta 0)

To git@github.com:sotrip/gittest.git

* [new branch] first-branch -> first-branch


6.5 两个分支进行比较

#git diff master first-branch //比较master与first-branch

diff --git a/2.txt b/2.txt

new file mode 100644

index 0000000..b09edf1

--- /dev/null

+++ b/2.txt //表示first-branch上多了一个2.txt

@@ -0,0 +1,2 @@

+edit in first-branch

+


6.6 分支合并到master上

#git checkout master

#git merge first-branch //把first-branch的内容合并到master上

Updating d3ab103..9abd8f2

Fast-forward

2.txt | 2 ++

1 file changed, 2 insertions(+)

create mode 100644 2.txt


#ls

1.txt 2.txt


#cat 2.txt

edit in first-branch


#git log

commit 9abd8f2d8fe7c08ca246464552dae25397694582

Author: jingbo

Date: Thu Apr 7 22:26:26 2016 +0800

2.txt commit in first-branch //在first-branch上提交的内容也显示在日志中

...


6.7 从远程拉一个分支

有两个办法,第一种是

#git fecth origin

#git checkout first-branch

Branch first-branch set up to track remote branch first-branch from origin.

Switched to a new branch 'first-branch'


第二个办法

#git checkout -t origin/first-branch

Branch first-branch set up to track remote branch first-branch from origin.

Switched to a new branch 'first-branch'


七.tag操作

tag一般维护一个只读的版本,不再进行修改

#git tag -a v1.0 -m "v1.0 ready for publish" //创建一个tag ,名字是"v1.0"


#git tag //查看tag

v1.0


#git push origin v1.0 //推送tag 到github上

Counting objects: 1, done.

Writing objects: 100% (1/1), 162 bytes | 0 bytes/s, done.

Total 1 (delta 0), reused 0 (delta 0)

To git@github.com:sotrip/gittest.git

* [new tag] v1.0 -> v1.0


#git checkout v1.0 切换到这个tag 上

注意 最好不要在tag进行修改东西,就把tag维护成一个只读的版本


八.其他

#git rm 2.txt 删除2.txt 这个文件

#git remote -v 可以查看远程的git的地址


九.Git merger 与 git rebase 的区别

1. git merge 和 git rebase 都是用来合并两个分支的。

git merge b #将b分支合并到当前分支

git rebase b #也是把 b分支合并到当前分支

假设你现在基于远程分支"origin",创建一个叫"mywork"的分支。

$ git checkout -b mywork origin

假设远程分支"origin"已经有了2个提交,如图

现在我们在这个分支做一些修改,然后生成两个提交(commit).

$ vi file.txt

$ git commit

$ vi otherfile.txt

$ git commit

但是与此同时,有些人也在"origin"分支上做了一些修改并且做了提交了. 这就意味着"origin"和"mywork"这两个分支各自"前进"了,它们之间"分叉"了。

在这里,你可以用"pull"命令把"origin"分支上的修改拉下来并且和你的修改合并; 结果看起来就像一个新的"合并的提交"(merge commit):

但是,如果你想让"mywork"分支历史看起来像没有经过任何合并一样,你也许可以用 git rebase:

$ git checkout mywork

$ git rebase origin

这些命令会把你的"mywork"分支里的每个 提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把"mywork"分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到"mywork"分支上。

当'mywork'分支更新之后,它会指向这些新创建的提交(commit),而那些老的提交会被丢弃。 如果运行垃圾收集命令(pruning garbage collection), 这些被丢弃的提交就会删除. (请查看 git gc)



2.解决冲突

在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:

$ git rebase --continue

这样git会继续应用(apply)余下的补丁。

在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。

$ git rebase --abort


3.git rebase和git merge的区别

现在我们可以看一下用合并(merge)和用rebase所产生的历史的区别:

当我们使用Git log来参看commit时,其commit的顺序也有所不同。

假设C3提交于9:00AM,C5提交于10:00AM,C4提交于11:00AM,C6提交于12:00AM,

对于使用git merge来合并所看到的commit的顺序(从新到旧)是:C7 ,C6,C4,C5,C3,C2,C1

对于使用git rebase来合并所看到的commit的顺序(从新到旧)是:C7 ,C6‘,C5',C4,C3,C2,C1

因为C6'提交只是C6提交的克隆,C5'提交只是C5提交的克隆,

从用户的角度看使用git rebase来合并后所看到的commit的顺序(从新到旧)是:C7 ,C6,C5,C4,C3,C2,C1

发布时间: 9年前Linux124人已围观返回回到顶端

很赞哦! (1)

上一篇:linux netstat命令

下一篇:linux xargs命令

文章评论

  • 请先说点什么
    热门评论
    123人参与,0条评论

站点信息

  • 建站时间:2016-04-01
  • 文章统计:728条
  • 文章评论:82条
  • QQ群二维码:扫描二维码,互相交流