git 笔记记录(七) git Clone

"不能把鸡蛋放在一个篮子里",Git版本库目录与工作区在一起,因此存在一损俱损的问题.


2个版本库之间通过PULL和PUSH操作实现同步.

1.版本库A通过Clone操作创建版本库B

2.版本库A通过PUSH,将新的提交传递给版本B

3.版本库A通过PULL,将版本库B中的新提交拉回到自身(A).

4.版本库B通过PULL,将版本库A中的新提交拉回到自身(B).

5.版本库B通过PUSH,将新提交传递给版本库A.


git clone 命令实主要有如下三种用法:

  1. 用法1:git clone<repository> <directory>
  2. 用法2:git clone --bare <repository> <directory.git>
  3. 用法3:git clone --mirror <repository> <directory.git>
用法1将<repository>指向的版本库创建一个克隆到<directory>目录.目录<directory>相当于克隆版本库的工作区,文件都会检出,版本库位于工作区的.git目录中.
用法2与用法3创建的克隆版本库都不包含工作区,直接就是版本库的内容,这样的版本库称为裸版本库.一般约定俗成的裸版本库的目录名以.git为后缀,所以上面示例中将克隆出的版本库目录名写成<directory.git>
用法3区别于用法2在于用法3克隆出来的裸版库对上游版本库进行了注册,这样可以在裸版本库中使用git fetch命令和上游版本库进行持续同步.

一,对等工作区
   不使用--bare或--mirror创建出来的克隆包含工作区,这样会产生两个包含工作区的版本库,这两个版本库是对等的.
    
       这两个工作区没有本质区别,但是往往是在一个版本(A)中进行的.而(B)作为备份.对于对等工作区模式,版本库的同步只有一种可行的操作模式,就是备份(B)执行git  pull命令从源版本库(A)中拉回新的提交实现版本同步,而不能从版本库A向版本库B执行git  push实现同步.这是因为默认更新非裸版本库的当前分支是不被允许,因为这样会导致暂存区与工作区与推送至版本的新提交不一致.

二,克隆生成裸版本库
  裸版本库没有工作区,所以可以直接通过push实现同步.
    
使用--bare参数克隆,就可以直接推送了  使用--bare 参数将demo版本克隆到/path/to/repos/demo.git然后可以在demo版本向克隆版本执行推送操作了.
git clone --bare  /workspace/demo  /path/to/repos/demo.git
git push #实现同步


三,创建生成裸版本库
   裸版本库不仅可以通过克隆方式创建,还可以通过git  init方式命令以初始化的方式创建.
  
git init用于初始化一个版本库,在目录path/to/repos/demo-init.git目录中创建一个空的裸版本库.
但是此时不能直接在A中执行git push 因为path/to/repos/demo-init.git版本刚刚初始化完成,没有任何提交,更不要说分支了.当执行git push时,如果没有指定推送的分支,而且当前的分支也没有注册到远程的某个分支,将检查远程分支是否有和本地相同的分支名,如果有则推送,否则推送失败,所以第一次执行推送要写的完整一些
git init  --bare  /path/to/repos/demo-init.git

git push /path/to/repos/demo-init.git master:master
第二次推送可以不需要写后面的master:master了,因为远程版本库(demo-init.git)中已经不再是空版本库了,有名为master的分支.


















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值