2016-11-17 10 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. git fetchコマンドのrefs/data/valの意味はなんですか?

注:これはFETCH_HEADが何であるかを理解することではありません。だからそれは重複ではない。

+0

いいえ、重複していません。 – Nemo

+0

可能な複製:http://stackoverflow.com/questions/292357/what-are-the-differences-between-git-pull-and-git-fetch –

+1

[の1つのブランチだけをフェッチするにはどうすればよいですか?リモートのgitリポジトリ?](http://stackoverflow.com/questions/6368987/how-do-i-fetch-only-one-branch-of-a-remote-git-repository) – Joe

答えて

1

これは奇妙なワークフローであり、一般的にはあまり役に立ちません。その主な特色は、参照名空間を使用して、それがブランチ名であるかのように扱います。その代わりに、彼はそれがブランチであるかのように何ブランチが、その後、面白いREFを扱いませんを有するクローンを除い

効果は、--single-branchクローニングなどのです。

git checkoutステップは、分離HEADを生成します。

その後のコミットは、分離されたHEADを拡張する新しいコミットを行います。

最後のgit pushは、別のGitを更新し、固有の名前の参照をブランチとして扱い続けます。他のGitは自由にプッシュを拒否します。 refs/data/は、プッシュのための安全な名前空間ではないため、多くの/ほとんどが単純に行います。

名前付きリモートがないため、リモートのブランチ名は、マージまたはリベースの都合上、ローカルに保存することはできません。名前付きブランチがないので、Gitの組み込みブランチ動作は、コミット、マージ、リベースの利便性のために使用することはできません。名前付きブランチも名前付きリモートもないので、Gitに組み込まれているpushの動作は使用できません。完全にスペルアウトされたURLとHEAD -to-ref pushが必要です。

要するに、これはGitを慣習的に使用するのに不便な方法です。

1

これは、全体的なワークフローのためのいくつかの洞察を提供可能性があります2番目の質問については
What is the difference between pull and clone in git?

を、彼は彼の* .gitリンクでレポからブランチrefs/data/valをフェッチました。

+2

私は 'refs/data/val 'は枝、AFAIK –

+0

絶対に正しい!一定。 –

関連する問題