文件的更改 进行 信息跟踪 的软件,一般给开发软件的人用的,用于团队协作。

基本功能就是给改动的文件进行 编号 ,然后我们就可以按照 编号 查看文件的历史记录。

实际中,版本控制软件是按照目录对文件进行批量管理的,而不是一个一个管理。

下面以比较流行的 git 为例说明吧

git

安装配置

1
2
3
  git config [--system,--global, --list]
  git config user.name = "用户名"
  git config user.email = "邮箱"

配置远程登录

  1. 创建 SSH Key

1
  $ ssh-keygen -t rsa -C "youremail@example.com"
  1. 把公钥 id_rsa.pub 的内容复制到 Github "Account settings" 的 SSH Keys 中

  2. 测试 ssh -v git@github.com

用法

初始化版本控制目录

1
  git init <DIR>

你要进行版本控制的目录用这命令初始化一下

暂存区管理

你的文件修改后,就可以进行追踪了。进行追踪的文件先要存放在暂存区,然后存放到本地仓库。这是 git 软件的一个特点。

把文件加入暂存区
1
2
  git add <modified files>
  git add .
把文件从暂存区删除 (不追踪)
1
  git rm --cached <file>
用暂存文件恢复文件
1
  git checkout <file>
重置暂存,就是恢复成未暂存的状态
1
  git reset HEAD <file>
改名文件
1
  git mv [file-original] [file-renamed]

本地库管理

把暂存文件保存到本地库
1
  git commit -m "msg"
撤销 [ 恢复到修改前]
1
2
3
  git checkout <file>
  # 从另一个分支恢复修改 
  git checkout <branch>  <file>
反转(用本地版本库的东西替换掉本地的文件,再执行一次反过来)
1
2
3
4
  git revert HEAD                  撤销前一次 commit
  git revert HEAD^               撤销前前一次 commit
  git revert commit-id(比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
  git revert 是提交一个新的版本,将需要 revert 的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。
分支管理
创建分支
1
2
3
  git branch <BRANCHNAME> 
  # 从某分支创建分支 
  git checkout -b <ALTERNATE> <BRANCHNAME>
切换分支
1
  git checkout <BRANCHNAME>
合并分支
直接合并 把两条分支上的历史轨迹合并
1
  git merge
压合合并 如果想把某个分支的提交作为一个整体记录时,可以使用压合合并。
1
  git merge --squash <BRANCH>
拣选合并 只需合并某个提交,而不是全部改动.
1
  git cherry-pick <ID>
修改分支名称
1
  git branch -m <BRANCHNAME> <NEWBRANCHNAME>
删除分支
1
  git branch -d <BRANCHNAME>
stash(储藏)

可以先用 git stash save xxx 来保存工作区的内容,然后新建 一个分支并调用 git stash pop

分支的变基 rebase
1
2
  git checkout experiment
  git rebase master

远程仓库管理

克隆远程到本地仓库
1
2
git clone RESP
git clone --depth 1 RESP 只克隆最新的
添加远程源
1
2
3
  git remote add origin https://github.com/hanyudeye/test.git 
  # ssh
  git remote add origin git@github.com:hanyudeye/demo.git
远程同步
1
2
3
  git push -u origin master
  # 将本地分支上的提交推送到远程某分支 
  git push origin <BRANCH>:<REMOTEBRANCH>
更新本地
1
2
git pull
git pull git://github.com/tom/test.git
查看远程分支情况
1
2
git branch -r # 查看远程 branch
git checkout -b bug_fix_local bug_fix_remote #把本地端切换为远程的 bug_fix_remote branch 并命名为 bug_fix_local
修改远程仓库
修改
1
git remote  set-url origin [url]
先删后加
1
2
git remote rm origin
git remote add origin [url]
强制覆盖本地
1
2
3
git fetch --all
git reset --hard origin/master
git pull
拒绝合并无关的历史
1
2
3
4
  # 首先将远程仓库和本地仓库关联起来:
  git branch --set-upstream-to=origin/master master
  # 然后使用 git pull 整合远程仓库和本地仓库,
  git pull --allow-unrelated-histories    (忽略版本不同造成的影响)

日志查看

仓库状态
1
2
3
  git status
  git status -s 简短信息
  git remote -v 列出服务器地址
查看提交历史
1
2
  git log
  git log --oneline 简洁--graph 拓扑图 '--reverse'逆向显示

–author 指定用户日志 如果你要指定日期,可以执行几个选项:–since 和 –before,但是你也可以用 –until 和 –after。

查看某次提交的内容
1
  git show <id>
更详细的信息
1
2
3
  git blame <FILE>
  # 具体行的细节
  git blame -L 12,13 <FILE>

比较区别

1
2
3
4
5
6
7
  比较修改文件与暂存区的区别  git diff <FILE>
  比较暂存区和版本库的区别 git diff --cached <FILE>   
  比较不同版本区别 git diff <HEAD>

  git diff branch1 branch2 --stat   //显示出所有有差异的文件列表
  git diff branch1 branch2 文件名(带路径)   //显示指定文件的详细差异
  git diff branch1 branch2                   //显示出所有有差异的文件的详细差异

TAG

这是版本信息

某个分支创建标签
1
2
  git tag  [ TAG ] [BRANCH] 
  git tag 1.0  [branch]
查看可发布版本
1
  git tag
签出标签
1
  git checkout 1.0

使用 Git 子模块跟踪外部版本库

1
2
3
4
5
6
添加子模块 git submodule add <RESP> <MODULENAME>
显示子模块 git submodule

克隆含子模块的版本库
还要初始化子模块  git submodule init <MODULENAME>
然后更细 git submodule update <MODULENAME>

gitignore 忽略文件

  • “/”目录

  • “*”多个字符

  • “?”单个字符

  • “[]”单个字符匹配列表

  • “!”不忽略

  • fd1/* 忽略根目录下的 /fd1 目录的全部内容