版本控制
记录我们对文件、目录或工程等的修改历史,方便查看更改历史,备份以便恢复以前的版本。
原始纯手工的本地版本控制
最原始的版本控制就是通过复制和重命名实现本地文件修改的跟踪
[wlin@wlin local_version]$ ls
1
[wlin@wlin local_version]$ cp 1 1.01
[wlin@wlin local_version]$ echo "update 1" > 1
[wlin@wlin local_version]$ ls
1 1.01
[wlin@wlin local_version]$ cp 1 1.02
[wlin@wlin local_version]$ echo "update 2" > 1
[wlin@wlin local_version]$ ls
1 1.01 1.02
版本控制发展: 从集中式到分布式
所有的版本数据都保存在服务器上,一起工作的人从服务器上同步更新或上传自己的修改。比较有名的工具有CVCS(Centralized Version Control Systems)。在这种模式下的团队合作,通常是复制指定版本的快照,进行更新上传快照到统一的服务器上实现的。这个时候的版本控制,获取版本和提交更新都强烈依赖于服务器和快照。
将所有的版本信息仓库全部同步到本地,而非某个版本快照,可以在本地查看所有版本历史,也可以离线提交。获取版本和提交都不再强烈依赖于单个服务器,而只要有一个用户的设备没有问题就可以恢复所有数据。我们称这种为DVCS( Distributed Version Control System),即分布式版本控制。比较有名的工具有GIT。
GIT常见的概念
- 仓库
# 初始化本地方库 git init # 远程仓库 git clone 远程仓库_URL # 实际上仓库就是.git文件夹
- 工作区
#当前文件夹就是工作区 [wlin@wlin local_version]$ ll total 12 -rw-rw-r--. 1 wlin wlin 52 Jan 21 16:45 1 -rw-rw-r--. 1 wlin wlin 14 Jan 21 16:43 1.01 -rw-rw-r--. 1 wlin wlin 9 Jan 21 15:29 1.02
-
暂存区
# 暂存区实际上就是.git下的一个目录index # 该目录并非git的原始目录,而是在你第一次git add文件时生成的 # 我们可以理解其为added的文件的cache [wlin@wlin local_version]$ git init Initialized empty Git repository in /home/wlin/local_version/.git/ [wlin@wlin local_version]$ ll total 0 [wlin@wlin local_version]$ ll .git/ total 32 drwxrwxr-x. 2 wlin wlin 4096 Jan 22 16:07 branches -rw-rw-r--. 1 wlin wlin 92 Jan 22 16:07 config -rw-rw-r--. 1 wlin wlin 73 Jan 22 16:07 description -rw-rw-r--. 1 wlin wlin 23 Jan 22 16:07 HEAD drwxrwxr-x. 2 wlin wlin 4096 Jan 22 16:07 hooks drwxrwxr-x. 2 wlin wlin 4096 Jan 22 16:07 info drwxrwxr-x. 4 wlin wlin 4096 Jan 22 16:07 objects drwxrwxr-x. 4 wlin wlin 4096 Jan 22 16:07 refs [wlin@wlin local_version]$ echo "1" >> new_files [wlin@wlin local_version]$ ll .git/ total 32 drwxrwxr-x. 2 wlin wlin 4096 Jan 22 16:07 branches -rw-rw-r--. 1 wlin wlin 92 Jan 22 16:07 config -rw-rw-r--. 1 wlin wlin 73 Jan 22 16:07 description -rw-rw-r--. 1 wlin wlin 23 Jan 22 16:07 HEAD drwxrwxr-x. 2 wlin wlin 4096 Jan 22 16:07 hooks drwxrwxr-x. 2 wlin wlin 4096 Jan 22 16:07 info drwxrwxr-x. 4 wlin wlin 4096 Jan 22 16:07 objects drwxrwxr-x. 4 wlin wlin 4096 Jan 22 16:07 refs [wlin@wlin local_version]$ git status # On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # new_files nothing added to commit but untracked files present (use "git add" to track) [wlin@wlin local_version]$ git add new_files [wlin@wlin local_version]$ ll .git/ total 36 drwxrwxr-x. 2 wlin wlin 4096 Jan 22 16:07 branches -rw-rw-r--. 1 wlin wlin 92 Jan 22 16:07 config -rw-rw-r--. 1 wlin wlin 73 Jan 22 16:07 description -rw-rw-r--. 1 wlin wlin 23 Jan 22 16:07 HEAD drwxrwxr-x. 2 wlin wlin 4096 Jan 22 16:07 hooks -rw-rw-r--. 1 wlin wlin 104 Jan 22 16:08 index drwxrwxr-x. 2 wlin wlin 4096 Jan 22 16:07 info drwxrwxr-x. 5 wlin wlin 4096 Jan 22 16:08 objects drwxrwxr-x. 4 wlin wlin 4096 Jan 22 16:07 refs