git、snv、repo等版本管理工具使用对比

        git是我们最常用的代码仓库管理工具,repo 是一款批量管理git的工具。

1、repo安装

        确保主目录下有一个 bin/ 目录,并且该目录包含在路径中:

$ mkdir ~/bin

$ PATH=~/bin:$PATH

下载 repo 工具,并确保它可执行:

$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo

$ chmod a+x ~/bin/repo

2、多个版本管理工具

 3、SVN与Git对比

4、repo常用命令

repo init -u URL -b ........ # 创建.repo

repo upload # 将代码提交到gerrit.

repo abandon master # 放弃master分支

repo forall -c "git reset --hard HEAD" # 所有代码执行git命令,回退到HEAD

# repo sync相当于git clone会把repository中的所有内容拷贝到本地,非首次运行repo sync相当于更新和合并.

# repo sync会更新.repo下面的文件,如果在merge的过程中出现冲突,这需要手动运行git rebase --continue.

repo sync -c -j 4

repo start master --all # 创建新分支

5、git-svn常用命令

# 下载一个 SVN 项目和它的整个代码历史,并初始化为 Git 代码库

$ git svn clone -s [repository]

# 查看当前版本库情况

$ git svn info

# 取回远程仓库所有分支的变化

$ git svn fetch

# 取回远程仓库当前分支的变化,并与本地分支变基合并

$ git svn rebase

# 上传当前分支的本地仓库到远程仓库

$ git svn dcommit

# 拉取新分支,并提交到远程仓库

$ svn copy [remote_branch] [new_remote_branch] -m [message]

# 创建远程分支对应的本地分支

$ git checkout -b [local_branch] [remote_branch]

6、git常用命令

git log # 查看当前库的git log信息

git log -p -2 # -2 来仅显示最近两次提交

git show # 的命令显示当前HEAD上的最近一次的提交(commit)

git log -n1 -p # 同上

git status ./ # 查看当前库的状态

git reset HEAD~1 # 将当前库恢复到HEAD的上一个版本

git diff ./ # 比较当前库的修改情况

git add ./ # 将当前库的代码修改提交到暂存区

git commit ./ # 将代码提交到本地分支

git commit --file ../commit_log.txt # 指定messege文件

git commit --amend ./ # 追加修改

# git commit 加上 -a 选项,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤

# 如果你的提交信息(commit message)写错了且这次提交(commit)还没有推(push), 你可以通过下面的方法来修改提交信息(commit message)

git commit --amend --only -m 'xxxxxxx'

# 想从一个提交(commit)里移除一个文件

git checkout HEAD^ myfile

git add -A

git commit --amend

# 删除我的的最后一次提交(commit)

git reset HEAD^ --hard

git push -f [remote] [branch]

cd git_work # 找一个干净目录,假设是git_work

git clone http://myrepo.xxx.com/project/.git # 这样在git_work目录下得到一个project子目录

cd project

git branch -a # 列出所有分支名称如下:

remotes/origin/dev

remotes/origin/release

git checkout -b dev22 remotes/origin/release #是checkout远程release分支,在本地起名为dev22分支,并切换到本地的dev22分支

git checkout -b dev11 remotes/origin/dev # 作用参见上一步解释

git checkout dev22 #切换回release分支,并开始开发。

git pull # 更新本地仓库及本地暂存区及工作目录

git commit --author 'Freyll<hell@github.com>' --file ../commit_log.txt

git commit --amend --author 'Freyll<hell@github.com>' --file ../commit_log.txt

# commit_log.txt中添加Change-Id:Id89afdd8cb

git push origin HEAD:refs/dev22/master # 提交代码到远程分支

git branch -d dev22 # 删除本地分支dev22

git config -l # 参看配置信息

git show HEAD^ # 查看HEAD的上一个版本信息

git show HEAD~4 # 查看HEAD的上溯4代的信息

git reset --hard HEAD^^ # 回退两个版本

git reset --hard 8308f03 # 回退到指定的commitID前7位的版本

git reset 9e5e64a # 将会使 master 指向 9e5e64a --hard 会强制覆盖了工作目录中的文件

git clean -dfx #清除库上没有的东西

git remote -v # 参看远程仓库

git branch -a # 参看远程分支

# 查看当前git分支所属

git branch -vv

git branch | grep "*"

# git log 附带一系列的总结性选项。如想看到每次提交的简略的统计信息,你可以使用 --stat 选项

git log --stat

# --shortstat 只显示 --stat 中最后的行数修改添加移除统计

# --name-status 显示新增、修改、删除的文件清单。

git log --oneline --decorate --graph --all # 图像显示git log信息

git log --pretty=format:"%h - %cd %s" --graph # 列出指定格式的log

git log -since="2 weeks ago" # 显示2周前到现在所有的历史记录

git reflog # 查看引用日志

# 从 Git 中移除某个文件,就必须要从已跟踪文件清单中移除(确切地说,是从暂存区域移除),然后提交

git rm

# git mv ...

# 下载远程仓库的所有变动

git fetch [remote]

# 显示所有远程仓库

git remote -v

# 显示某个远程仓库的信息

git remote show [remote]

# 增加一个新的远程仓库,并命名

git remote add [shortname] [url]

# 取回远程仓库的变化,并与本地分支合并

git pull [remote] [branch]

# 上传本地指定分支到远程仓库

git push [remote] [branch]

# 强行推送当前分支到远程仓库,即使有冲突

git push [remote] --force

# 推送所有分支到远程仓库

git push [remote] --all

# git fetch origin 会抓取克隆(或上一次抓取)后新推送的所有工作

# git fetch 命令会将数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作

git fetch [remote-name]

#如果你使用 clone 命令克隆了一个仓库,命令会自动将其添加为远程仓库并默认以 “origin” 为简写。

#所以,git fetch origin 会抓取克隆(或上一次抓取)后新推送的所有工作。

#必须注意 git fetch 命令会将数据拉取到你的本地仓库 - 它并不会自动合并或修改你当前的工作。

#当准备好时你必须手动将其合并入你的工作。

#git clone 命令会自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支(或不管是什么名字的默认分支)。

#运行 git pull 通常会从最初克隆的服务器上抓取数据并自动尝试合并到当前所在的分支

#当 git fetch 命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容。它只会获取数据然后让你自己合并。

#git pull 在大多数情况下它的含义是一个 git fetch 紧接着一个git merge 命令。

#不管它是显式地设置还是通过clone或checkout 命令为你创建的,git pull都会查找当前分支所跟踪的服务器与分支,从服务器上抓取数据然后尝试合并入那个远程分支。

#由于 git pull 的魔法经常令人困惑所以通常单独显式地使用 fetch 与 merge 命令会更好一些。

# 当你想要将 master 分支推送到 origin 服务器时(再次说明,克隆时通常会自动帮你设置好那两个名字),那么运行这个命令就可以将你所做的备份到服务器

git push origin master

# 查看某一个远程仓库的更多信息

git remote show origin

#to discard changes in working directory是一个危险的命令,你对那个文件做的任何修改都会消失.

git checkout -- <file>..."

# 恢复暂存区的指定文件到工作区

git checkout [file]

# 恢复某个commit的指定文件到暂存区和工作区

git checkout [commit] [file]

# 恢复暂存区的所有文件到工作区

git checkout .

# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变

git reset [file]

# 重置暂存区与工作区,与上一次commit保持一致

git reset --hard

# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变

git reset [commit]

# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致

git reset --hard [commit]

# 重置当前HEAD为指定commit,但保持暂存区和工作区不变

git reset --keep [commit]

# 新建一个commit,用来撤销指定commit

# 后者的所有变化都将被前者抵消,并且应用到当前分支

git revert [commit]

# 暂时将未提交的变化移除,稍后再移入

git stash

git stash pop

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大王算法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值