scm command line

scm command line usage

这里介绍下工作中经常使用的到的代码管理工具svn 和git的常用命令, 本人对svn使用的比较少,工作中主要使用git。

svn command line

将文件从服务器更新到本地版本库:
svn checkout path (path 为svn仓库路径)
例如:

svn checkout file:///F:/svn_test
svn co http://xx.xx.xx.xx/svn/svn_test

添加文件到版本库
svn add file(folder)
例如:

svn add test.c

查看文件或者目录状态
svn status path(file)

svn st test.c

将改动的文件提交到版本库
svn commit -m “LogMessage“ [-N] [—no-unlock] PATH(如果选择了保持锁,就使用–no-unlock开关)
例如:

svn ci -m "update test.c" test.c

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

svn up

删除文件
svn delete file -m “delete file”
例如:

svn del test.c
svn ci -m "delete test.c"

查看日志

svn log path

查看文件信息

svn info path

比较差异

svn diff path

git command line

初始化纯仓库

mkdir project.git && cd project.git
git init --bare

初始化仓库并添加到服务器

cd myproject
git init 
git add .
git commit -m "initialize repo"
git remote add origin xxx/project.git
git push origin master

克隆仓库

git clone xxx/project.git 
or
git clone xxx/project.git mywork

查看远端分支

git branch -r

新建并切换到远端对应的分支:

git checkout -b new_branch

分支操作

git branch develop    #创建一个名为develop的本地分支
git checkout develop    #切换到本地的develop分支上
git push origin develop     #创建远端develop分支
git checkout --track origin/develop #拉取远端develop分支
git push origin develop:develop    #提交分支到远端
git push origin :develop#删除远端develop分支
git fetch --prune    #删除已经不存在的远端分支

标签操作

git tags        #显示已有标签
git tag v1.1.09     #创建轻量级标签
git tag -a v1.1.0 -m “comments for the tag”the#创建含附注标签
git push origin v1.1.06     #将标签推送到远端服务器
git push origin --tags#一次推送所有本地新增标签
git push origin :refs/tags/v1.1.06#删除远端v1.1.0标签
git tag -d v1.1.06      #删除本地v1.1.0标签

添加.gitignore
通常将不需要纳入git管理,又不希望总是出现在未跟踪文件列表里的文件(如编译过程中生成的文件等等),通过创建.gitignore文件来忽略它们,规则请google。
若.gitignore失效,可如下操作

git rm -rf --cached .
git add .
git commit -m “now .gitignore should working”

服务器地址变更后,工作目录做如下操作

git remote set-url origin git@xxx.xxx.xxx.xxx:/home/git/repositories/project.git
git remote show origin  #查看变更后的远程仓库信息

git仓库服务器迁移

git clone --bare git@oldserver:project.git  #从原服务器获取纯仓库
cd project.git
git push --mirror git@newserver:newproject.git #以镜像方式将仓库推送到新的服务器 

分支工作流程

git pull#获取服务器最新的代码
git checkout -b foobar#创建并切换到一个本地分支
… hack hack hcak …创建并切换到一个本地分支#在本地的该分支上做开发
git status#查看修改
git checkout --files        #取消修改
git add files#暂存修改
git reset HEAD xxx#取消暂存
git add xxx     #暂存修改
git commit    #提交
git checkout master#切换到本地master分支
git merge --no-ff foobar#将foobar分支的merge到master分支
git push origin master#更新到远端master分支
git branch -d foorbar#删除本地foobar分支
git branch -D foobar#若要删除未merge的foobar分支使用-D

撤销未更新到远端的commit

git log    #查看提交的commit
git reset --mixed  commit#回到待add状态
git reset --soft   commit#回到待commit状态
git reset --hard  commit#清楚所有修改 (注:会撤销所有的修改)

撤销已更新到远端的commit(注:该操作会丢掉所有该commit之后的更新),若有其他人已更新,则也需要在其工作目录回退到对应的commit。

git log    #查看提交的commit
git reset --hard commit#回退到某个commit状态
git push origin develop -foobar#强制更新到远端服务器 

撤销已更新到远端的提交:(git revert ,当执行过git push后,想安全撤销该次的push操作)

git log    # 1.查看该次提交的sha1值
    commit 2996d7ff2b345c826b51da922b63e8efadb6b146
    Author: Wonfee <dasifly@gmail.com>
    Date:   Thu Jul 2 08:16:52 2015 +0800
    remove useless file

git revert 2996d7ff2b345c826b51da922b63e8efadb6b146 # 2.执行revert操作
git push   # 3.更新到远端仓库
这样就可以将上次的commit安全的撤销

stash 使用
当你在某个分支进行的开发工作还没完成时,此时主分支发现有bug必须立即去修复,而此时又不想提交还没完成的分支开发,可以使用stash来储存你的开发。

… hack hack hack …
git stash
fix emergency bugs
git commit
git stash popcontinue hacking …

rebase使用

git checkout -b feature_dev dev
bala bala …
git add xxx
git commit -a “xxxx”xxxx        #在临时分支上做开发提交
git checkout dev                #切回本地dev分支
git pull origin develop        #将远程dev分支更新到本地
git checkout  feature_dev       #切回临时开发分支
git rebase dev                  # 执行 rebase操作
git checkout dev                #切回本地dev分支
git merge --no-ff  feature_dev  #合并临时分支
git push origin dev             #更新到服务器
git branch -d  feature_dev      # 删除临时分支

其他常用命令

gitk图形化工具,方便查看项目的更新情况
git diff xxx            查看修改的差异
git log                 查看提交的commit
git tag                 查看所有的tag
git checkout commit     切换到某个commit
git checkout tag    切换到某个标签

推荐书籍:
progit.zh.pdf
Git权威指南.pdf