一、基本概念
Git:分布式版本控制系统。Git Gui为图形界面工具,Git Bash为命令行工具。
版本库本质为一个高效的数据存储结构:
1、文件(blob):文本、二进制数据;
2、目录(Tree)
3、版本(commit):当创建新版本时,会自动根据数据内容计算出对应的十六进制散列值(版本号,eg.1632acb65b01c6b621d6e1105205773931bb1a41)
二、入门操作
1、准备Git环境
- 下载:http://git-scm.com/download(官网)
- 配置用户:config命令
git config --global user.name "17-XiXiLiu" #用户名
git config --global user.email "844897284@qq.com" #邮箱
2、创建项目
- 创建项目目录(用于Git测试)
- 创建版本库:
cd ./git/test # 切换至项目目录
git init # 创建版本库,即工作区
- 首次提交:
git add foo.txt bar.txt #确定哪些文件应包含在下一次提交中
git commit -m "sample project import" #-m可写成--message,将修改提交到版本库中,并赋予一个版本号
- 检查状态:
修改foo.txt内容;先删除bar.txt,再添加bar.html新文件。
git status #查看项目自上次提交后所发生的修改
git diff foo.txt #显示foo.txt被修改的行
备注:bar.html被标记为Untracked files(未跟踪),是因为没有用add将其注册至版本库。
- 提交修改:
git add foo.txt bar.html #对修改的文件和新增的文件执行add
git rm bar.txt #对删除的文件执行rm
git status #会看到所有以上修改已被算入下次提交中
git commit -m "some changes" #提交修改
- 显示历史:
git log #显示项目版本提交历史,按提交时间降序显示
3、协作功能
在实际开发项目中,往往是将项目clone到本地(版本库副本),然后在本地项目版本库中进行开发,再将开发的内容进行提交(add和commit),最后再push到远程,请求merge,合并到主支上。
- 克隆版本库:
git clone ./test ./test-clone #test-clone为test的克隆体(副本)
- 从另一版本库中获取修改:
修改test/foo.txt,提交修改。
cd ./test
git add foo.txt
git commit -m 'a change in the original' #新提交的信息存入test版本库中,但test-clone版本库中是没有的
git log --oneline #--oneline默认只显示提交ID和提交信息的第一行
修改test-clone/bar.html,提交修改。
cd ./test-clone
git add bar.html
git commit -m 'a change in the clone' #新提交的信息存入test-clone版本库中,但test版本库中是没有的
git log --oneline #--oneline默认只显示提交ID和提交信息的第一行
git pull #将原版本库的新提交传给克隆体,并从原版库中取回新的修改,进行对比后,在工作区合并两边修改,创建新的提交(merge),pull只在克隆版本库中执行。
备注:某些情况会导致冲突。需手动清理一些文件。
git log --graph #日志图形化
- 创建共享版本库:
git clone --bare ./test ./test-bare #创建裸版本库,不带工作区,用来充当push的汇聚点,便于他人从中拉回修改
- push上传修改:
cd ./test
git add foo.txt
git commit -m "more changes in the original"
git push /e/git/test-bare master #需指定目标版本库的路径和分支
- 获取修改:
cd /e/git/test-clone
git pull /e/git/test-bare master
(pull和push用于本地和远程之间的共享版本提交)
博主是个小白,正在学习中,将笔记拿出来和大家分享一下,若有理解错误的地方,请大牛多指教!