Git入门指南
git学习资源:
- star 的作用是收藏,目的是方便以后查找。
- watch 的作用是关注,目的是等作者更新的时候,你可以收到通知。
- fork 的作用是参与,目的是你可以增加新的内容,然后 Pull Request,把你的修改和主仓库原来的内容合并。
fork之后,一般可以看到一个带有自己git名称的ssh或者https访问的地址。例如:
git@github.com:fuleying/parrots.git 可以ssh无密码git push!!
参与别人的开源项目,只需访问它的项目主页,点“Fork”就在自己的账号下克隆了一个仓库,
然后从自己的账号下使用SSH URL进行clone,因为只有SSH URL 链接的仓库才能推送修改。
开发完成后要往自己的仓库推送。如果你希望你fork的官方库能接受你的修改,你就在GitHub上发起一个pull request。
- 首先在github上新建一个远程仓库git-learn,此时会看到一个带有自己git名称的ssh或者https访问的地址。
https://github.com/fuleying/git-learn.git
git@github.com:fuleying/git-learn.git - 在本地建立一个相同名称的文件夹git-learn,并进入该文件夹目录
- git init 初始化空仓库
- 创建一些文件,git add,将文件纳入版本控制,可以将多个文件多步纳入
- git commit -m "first commit" 进行离线提交,完成纳入操作
- 添加远程仓库origin,即用字符串 origin指代对应的仓库地址,origin即远程仓库在本地的简称
git remote add origin git@github.com:fuleying/git-learn.git - 将本地的master分支push到远程仓库origin上 git push origin master
git remote 查看当前配置有哪些远程仓库
git remote -v --verbose
的简写,显示远程仓库对应的克隆地址
git快照
git会把出现变更的文件直接拷贝,形成新的blob类型的快照,而非与上一个版本的diff。而不是在每个版本中记录着各个文件的具体差异。
所以一旦需要查看某版本直接load即可,而其他差异版本控制需要做merge,所以快。空间换时间。
并非每个当前版本都需要做备份,为提高性能,若文件没有变化,Git不会再次保存,而只对上次保存的快照作一链接。
git会在隐藏目录.git里存在object里,定期会优化,保证快照空间,和读取时间的平衡。
Git的四种基本类型
-
BLOB:每个blob代表一个(版本的)文件,blob只包含文件的数据,而忽略文件的其他元数据,如名字、路径、格式等。
-
TREE:每个tree代表了一个目录的信息,包含了此目录下的blobs,子目录(对应于子trees),文件名、路径等元数据。因此,对于有子目录的目录,git相当于存储了嵌套的trees。
-
COMMIT:每个commit记录了提交一个更新的所有元数据,如指向的tree,父commit,作者、提交者、提交日期、提交日志等。每次提交都指向一个tree对象,记录了当次提交时的目录信息。一个commit可以有多个(至少一个)父commits。
-
TAG:tag用于给某个上述类型的对象指配一个便于开发者记忆的名字, 通常用于某次commit。
Git 专用名词
- Workspace:工作区,从Git目录中的压缩对象数据库中提取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录。
- Index / Stage:暂存区,一般都放在 Git 目录中。有时候人们会把这个文件叫做索引文件,不过标准说法还是叫暂存区域。
- Repository:仓库区(或本地仓库),即本地的.git 目录。
- Remote:远程仓库
基本的 Git 工作流程如下:
- 在工作目录中修改某些文件。
- 对修改后的文件进行快照,然后保存到暂存区域。
- 提交更新,将保存在暂存区域的文件快照永久转储到 Git 目录中。
git fetch到远程仓库中拉取从你上次克隆以来别人上传到此远程仓库中的所有更新(或是上次 fetch 以来别人提交的更新)。fetch命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。
git fetch origin
来同步远程服务器上的数据到本地。该命令首先找到origin
是哪个服务器,然后从上面获取你尚未拥有的数据,更新你本地的数据库,然后把origin/master
的指针移到它最新的位置上。
git clone自动创建本地的 master 分支用于跟踪远程仓库中的 master 分支。git pull从原始克隆的远端仓库中抓取数据后,合并到工作目录中的当前分支。