2016-11-17 74 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

絕對正確!固定。 –