2016-11-17 101 views
0

我是git的新手,我熟悉常规的git克隆,开发,提交和推送工作流程。在我看过的教程之一,我注意到开发人员执行以下操作:没有克隆的Git开发

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/valgit fetch命令中是什么意思?

注意:这不是要了解FETCH_HEAD是什么。所以它不是重复的。

+0

不,它不是重复的。 – Nemo

+0

可能的重复:http://stackoverflow.com/questions/292357/what-are-the-differences-between-git-pull-and-git-fetch –

+1

可能的重复[如何只抓取一个分支的一个远程git仓库?](http://stackoverflow.com/questions/6368987/how-do-i-fetch-only-one-branch-of-a-remote-git-repository) – Joe

回答

1

这是一个奇怪的工作流程,并没有真正有用的一般。它的主要特点是使用一个特殊的参考命名空间,将refs/data/val视为分支名称。

效果克隆与--single-branch,只是不用他克隆了没有分支,然后把有趣的裁判,好像它是一个分支。

git checkout步骤产生分离的HEAD。

随后的提交会执行一个新的提交,它扩展了分离的HEAD。

最后的git push更新了其他Git,继续将特殊命名的引用视为分支。另一个Git可以自由地拒绝推送。很多/大部分都会这样做,因为refs/data/不是一个用于推送的已知安全名称空间。

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

简而言之,这是非常规使用Git的不方便的方式。

1

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

至于第二个问题,他在他的git的*链接取出由回购的分支refs/data/val

+2

我觉得'refs/data/val'是一个分支,AFAIK –

+0

绝对正确!固定。 –