没有克隆的Git开发

时间:2016-11-17 03:08:36

标签: git

我是git的新手,我熟悉常规的git clone,开发,提交,推送工作流程。在我观看的其中一个教程中,我注意到开发人员正在执行以下操作:

git init
git fetch ssh://someserver.git refs/data/val
git checkout FETCH_HEAD
.
. make changes to files
.
git commit -am "somemessage"
git push ssh://someserver.git HEAD:refs/data/val

有人可以帮忙解释一下:

  1. 这里遵循什么工作流程?在没有克隆的情况下这样做的原因是什么?
  2. refs/data/val命令中git fetch的含义是什么?
  3. 注意:这不是要理解FETCH_HEAD是什么。所以这不是重复。

2 个答案:

答案 0 :(得分:1)

这可能会为整个工作流程提供一些见解:
What is the difference between pull and clone in git?

关于第二个问题,他正在他的* .git链接从回购中获取分支 refs/data/val

答案 1 :(得分:1)

这是一个奇怪的工作流程,一般来说并不是很有用。它的主要特征是使用一个特殊的引用命名空间,将refs/data/val视为分支名称。

效果就像克隆--single-branch,除了他用 no 分支克隆,然后将有趣的ref视为分支。

git checkout步骤会产生一个分离的HEAD。

后续提交进行了一次新的提交,扩展了分离的HEAD。

最终git push更新了另一个Git,继续将特殊命名的引用视为分支。另一个Git可以自由拒绝推送。很多/大多数人只是因为refs/data/不是一个已知的安全命名空间来推送。

由于没有命名远程,因此为了方便合并和/或重新定位,无法在本地存储远程的分支名称。由于没有命名分支,因此Git的内置分支行为不能用于提交,合并和/或重新定位。由于既没有命名分支,也没有命名远程,因此无法使用Git的内置push行为,需要完全拼写的URL和HEAD - to-ref push。

简而言之,这是一种不经常使用Git的不方便方式。