2016-11-17 3 views
0

Я новичок в git, и я знаком с регулярным git clone, develop, commit, push workflow. В одном из учебников я наблюдал, я заметил, что разработчик делает следующее:Git development without 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?

ПРИМЕЧАНИЕ: Это не значит, что такое 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 производит отдельно стоящую головку.

Последующая фиксация совершает новую фиксацию, которая расширяет выделенную головку.

Окончательный git push обновляет другой Git, продолжая рассматривать названную ссылку как ветку. Другой Git может отказаться от толчка. Многие/большинство выполняли бы просто потому, что refs/data/ не является надежным пространством имен для push.

Поскольку нет имени именованного пульта дистанционного управления, имена ветви удаленного не могут храниться локально для удобства слияния и/или перезагрузки. Поскольку нет названных ветвей, встроенное поведение Git не может использоваться для удобства совершения, слияния и/или перезагрузки. Поскольку не существует ни названных ветвей, ни именованного пульта, нельзя использовать встроенное поведение push Git, требующее полного URL-адреса и HEAD -to-ref.

Короче говоря, это неудобный способ использования Git нетрадиционно.

1

Это может дать некоторое представление для общего процесса:
What is the difference between pull and clone in git?

Что касается второго вопроса, то он был в выборку филиалаrefs/data/val из репо на его * .git ссылки.

+2

Я думаю 'refs/data/val' является филиалом, AFAIK –

+0

Абсолютно верно! Исправлена. –