Git入门
by 王宁
by 王宁
版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制系统分为三种:
大多都是采用某种简单的数据库或者使用整个文件夹拷贝来记录文件的历次更新差异
集中化的版本控制系统诸如CVS,Subversion以及Perforce等.
都有一个单一的集中管理的服务器.保存所有文件的修订版本.而协同工作的人们都通过客户端连到这台服务器.取出最新的文件或者提交更新。
分布式版本控制系统诸如Git等.
客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来.这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复,因为每一次的提取操作,实际上都是一次对代码仓库的完整备份
当文件变动发生提交时,增量式文件系统存储的是文件的差异信息.
当文件变动发生提交时,Git存储的则为文件快照(即整个文件内容),并保存指向快照的索引.考虑到性能因素.如果文件内容没有发生任何变化,该文件系统则不会重复保存文件索引,只是简单地保存上次提交的快照索引.
Git 之所以选择这样的底层存储数据结构,主要是为了提高 Git 分支的使用效率.实际上,Git 分支本质上是一个指向索引对象的可变指针,而每一个索引对象又指向文件快照
系统 | 安装命令 |
---|---|
Debian/Ubuntu | apt-get install git |
Fedora/RedHat/CentOS | yum install git |
Gentoo | emerge --ask --verbose dev-vcs/git |
Arch Linux | pacman -S git |
openSUSE | zypper install git |
FreeBSD | cd /usr/ports/devel/git && make install |
Solaris 11 Express | pkg install developer/versioning/git |
OpenBSD | pkg_add git |
设置用户信息:
$ git config --global --add user.name 你的名字
$ git config --global --add user.email youremail@koolearn-inc.com
$ git init
Initialized empty Git repository in C:/Users/Administrator/Desktop/git/test/.git/
瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。
$ echo "Git is a version control system." > readme.txt
// 输入这句话保存到创建的readme.txt文件中
$ echo " Git is free software." >> readme.txt
// 输入此内容追加到readme.txt中
$ git add readme.txt
用命令git add告诉Git,把文件添加到仓库
$ git commit -m "wrote a readme file"
[master (root-commit) cb926e7] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
git commit
命令,-m
后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。
git commit
命令执行成功后会告诉你,1个文件被改动(我们新添加的readme.txt文件),插入了两行内容(readme.txt有两行内容)
为什么Git添加文件需要add,commit一共两步呢?
$ git add file1.txt
$ git add file2.txt file3.txt
$ git commit -m "add 3 files."
git status
git diff
git log
git checkout
git reset
Git 的分支模型称为“必杀技特性”,而正是因为它,将 Git 从版本控制系统家族里区分出来
$ git checkout -b dev
Switched to a new branch 'dev'
git checkout -b
命令表示创建并切换,相当于以下两条命令:
$ git branch dev
$ git checkout dev
Switched to branch 'dev'
用git branch
命令查看当前分支:
$ git branch
* dev
master
$ git branch -d dev
Deleted branch dev (was 5659891).
$ git merge dev
Updating d17efd8..fec145a
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
git branch
git branch <name>
git checkout <name>
git checkout -b <name>
git merge <name>
git branch -d <name>
为了能在任意 Git 项目上协作,你需要知道如何管理自己的远程仓库。 远程仓库是指托管在因特网或其他网络中的你的项目的版本库。 你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读写。 与他人协作涉及管理远程仓库以及根据需要推送或拉取数据。 管理远程仓库包括了解如何添加远程仓库、移除无效的远程仓库、管理不同的远程分支并定义它们是否被跟踪等等。
$ git clone git@git.koolearn-inc.com:root/gitlab-test.git
$ git pull origin master
$ git push origin master
git tag
git tag <name>
git tag -a <tagname> -m "blablabla..."
git tag -d <name>
git push <remotename> <tagname>
git push <remotename> --tags
git push origin :<tagname>
delelop:对应trunk环境
test:对应neibu环境
release:对应release环境
master:对应预发和线上环境
future-branch:功能分支
local-branch:本地分支