Git笔记(一)
Git是一个分布式版本控制,个人在自己PC上工作,提交,当需要将工作分享的时候,只需连接到特定仓库即可,每个人都是独立开发,不存在强制性集中管理,同时不会因为中央服务器崩溃而导致的整个版本系统的崩溃.
Git的几种工作模型:
⑴访问模型:当使用Git时,对于你的电脑来说你使用的是集中式系统开发方式,仓库中的更改全部存放在你的机器上,当你完成一些工作,然后将这些工作保存到你本地的仓库,当你准备好讲工作共享给别人时,连接到远程仓库,将你特定分支的副本推送上去。同时Git不提供访问控制,允许任何开发者拥有仓库的完整读写权限。在最外层,通过登录来限制访问。
⑵分散贡献者仓库的模型:开发者创建一个补丁,将补丁提交给评审者,评审通过的,评审将其交给核心维护人员,核心维护人员提交到本地仓库,然后推送到集中式代码托管系统。
⑶适合并列贡献者仓库的模型:在并列系统中,上游项目保留了完整的控制,决定谁拥有项目主仓库的写入权限。每个贡献者使用代码托管系统将项目克隆,派生至他们的本地仓库,贡献者更改本地的副本,然后通过合并请求或拉去请求提交这些更改。
⑷共同维护模型:每个开发者在本地完成自己的工作,然后推送至项目共享的仓库。
分支策略:分支用于隔离一块代码上产生的不同的想法。
每个Git仓库都有一个提交库,提交通过元数据相互连接,每个提交包含一个指向自身父提交的引用。Git中的分支实际上是指向特定提交的命令指针(HEAD)。当你签出分支时,你将提交对象中存储的数据复制到你的工作目录中,当工作被复制到工作目录中,你可以进行任何操作,并且将更改作为一个新的提交对象存储到本地仓库。命名指针会自动更新并指向你刚创建的提交对象,同时你的分支也将更新。
为了防止命名分支和使用分支的冲突,使用约定来解决问题,约定来决定什么时候创建分支,合并。约定包含两种分支,一种是长期活跃的公开分支,短暂的私有分支。公开分支扮演代码中介的角色,可以并入大量开发者的贡献。短期分支作用用于隔离一个新想法的开发过程,例如修复bug等,新增功能等。
几种约定:
⑴主线分支开发:这个策略中只有少量的分支,开发者将他们的工作提交到一个中央分支,这个分支可以随时部署。在Git中称为master
⑵功能分支部署:所有的新工作都在一个功能分支上完成,这些分支通过一个集成分支与其他开发者完成的工作保持同步,集成分支用于接受新的功能。
四种专门命名的集成分支:maint分支包含了Git最近一次稳定发布的代码以及小数点版本的额外提交;master分支用于应该进入下一次发布的提交;next用于测试一些主题在进入master分支后的稳定性;pu分支建议的更新分支包含尚未准备好合并的提交。
创建本地仓库方法:
- 一个克隆的仓库
mkdir test
cd test
git clone https://github.com/xxx.git
git init
git status
- 一个空目录
mkdir empty-repository
cd empty-repository
git init
ls –al
查看历史记录:git log 用来查看提交记录,如果过多,可以使用git log –oneline
列出分支:git branch --list
列出所有分支:git branch –all
列出远程分支:git branch --remotes
更新远程分支列表: get fetch
使用不同的分支:git checkout branchName
创建分支:
首先签出你想作为起点使用的分支:git checkout master
然后创建分支:git branch newBranch_1
签出新分支: git checkout newBranch_1
从主分支创建一个新的开发分支:git checkout –b newBranch_1 master
在仓库中添加修改:将修改保存到你的Git仓库,需要两步,1.显示的暂存到索引,2.保存到你的仓库。
将特定的已修改添加至你的仓库: git add README.md git add branch-naming-rules.png
递归的添加指定路径下的所有文件: git add <directory_name> /*
添加扩展名为.svg的所有文件: git add *.svg
暂存git中所有已知的且在上次提交之后编辑过的文件: git add –update
添加所有修改过得文件: git status git add –all
一旦将变更添加至缓存区,就必须提交这个更改,如果继续编辑刚才添加到索引中的文件,则执行commit命令时,仅会添加之前暂存过得更改。
在仓库中添加部分文件的修改:git add –patch filename
通过—patch添加文件的过程分为多个步骤,首先初始化这个过程,然后从列表中选出一个选项,来决定如何创建你的补丁,将会看到以下提示,将这些修改添加至暂存区(y),不改变这个补丁片段(n),修改过的行将会以一个-(删除的行)或一个+(新增的行)开头。
从暂存区移除文件:git status git reset HEAD xxx.xx
忽略文件:创建一个全局设置来忽略这些文件,首先,告诉Git忽略文件的列表放在什么位置: git config –global core.excluedsfile ~/.gitignore,然后可以更新这个文件,每行一个文件名,可以使用确切的文件名,也可以使用通配符。
使用标签:标签用于定位指定的提交。
最近提交的快速列表: git log –oneline
单个提交的日志详细信息:git log id号 –max-depth=1
使用show命令以文本形式列出该提交中发生的修改:git show Id号
为某个提交对象添加一个新的标签: git tag import fao4c30
列出所有标签: git tag
一旦标签被创建,就可以通过标签所在的位置查看这个提交。
连接远程仓库:当你创建一个本地仓库,是无法将你的工作共享给别人,因为他们没有与之关联的远程仓库,或者你没有远程仓库的写入权限。为了上传你的作品,你讲需要在gtilab上创建一个新的项目,并将它与你的一个已有的仓库关联起来。
具体过程:1、创建新项目: 登录gitlab账户前往信息中心页面,然后创建一个new project,
2、添加第二个远程连接。每个项目对应一个独立的仓库,在gitlab中创建一个新的仓库,mkdir my-git
cd my-git
git init
touch README.md
git add README.md
git commit –m “first commit”
git remote add origin git@gitlab.com:xxxxxx.git
git push –u origin master
如果本地已经创建过一个仓库,则可以从git remote开始。
当选择一个远程连接加入到仓库中时,必须为它分配一个别名,默认情况下,这个别名是origin,当然可以用任意的名字。
使用自定义的名称在本地仓库添加远程连接:
git remote addmy_gitlab git@xxx.git
列出连接至你当前仓库的远程仓库:git remote –verbose
推送你的更改:在你第一次推送分支时,需要明确告诉Git将这些东西放在什么位置。
使用push命令上传分支: git push
如果没有设置上游分支,则会得到错误的消息:
git push –set-upstream my_gitlab 1-process_notes
分支维护:将工单分支并入master分支并删除本地分支和工单分支的远程副本。
将工单分支并入你的主分支:
git checkout master
git merge newBranch_1
删除这个分支的本地副本:
git branch –delete newBranch_1
对远程仓库进行清理,删除已经并入master分支的远程分支:
git push –delete my_gitlab newBranch_1