Как настроить несколько уровней отслеживания веток с помощью git - PullRequest
0 голосов
/ 24 июня 2018

У меня есть локальная ветка git, которая отслеживала удаленный ствол SVN.

Я создал новую ветку разработки и настроил локальную ветвь для ее отслеживания.

Я хочу, чтобы ветка разработки также отслеживала svn / trunk что-то вроде:

from:
local branch > development branch

to:
local branch > development branch > svn/trunk

Возможно ли это сделать с помощью git?

Я использую git версия 2.14.3

графический интерфейс пользователя git - smartgit v18.1

1 Ответ

0 голосов
/ 24 июня 2018

Нет, это невозможно в Git. Но это также не так важно (на самом деле!), Потому что отслеживание ветви в Git просто означает, что одна ветвь имеет другую установку в качестве в восходящем направлении:

git branch --set-upstream-to=desired-upstream my-branch

Каждая из ваших веток может иметь не более одного восходящего потока в любое время Когда ваша ветвь имеет восходящий поток, происходит следующее:

  • git fetch без аргументов знает, какой другой репозиторий Git может содержать коммиты для извлечения. Следовательно, вы можете запустить git fetch вместо git fetch <em>remote</em>.

    Но если у вас есть только один пульт с именем origin, что довольно часто, это ничего не даст, так как git fetch без аргументов будет извлекаться из origin, если у него нет ничего лучше от восходящего потока. Другими словами, git fetch уже выбирает с (одного) правильного пульта в любом случае. Таким образом, наличие здесь выше по течению ничего вам не купит.

  • git merge и git rebase, запускаемые без дополнительных аргументов, автоматически узнают, какое имя для удаленного отслеживания использовать. Это действительно покупает вам что-то, но если вы хотите иметь два восходящих потока, вам все равно придется указать git merge или git rebase , какой восходящий поток использовать, поэтому набрать git merge fred/xyzzy и git merge giselle/xyzzy не намного хуже. На самом деле это, вероятно, лучше: git merge upstream1 и git merge upstream2 короче типа, но fred/xyzzy upstream # 1, или это upstream # 2? Почему бы не использовать более запоминающееся имя?

  • Как и другие две выше, git pull - который просто запускает две другие, сначала получить, а затем одну из двух других команд - также знает, что использовать по умолчанию. Я рекомендую большинству пользователей Git избегать git pull, поскольку это удобная команда, но в худшие времена она неудобна. Если вы избегаете git pull, то, зная об этом, вы ничего не покупаете вообще.

  • Стандартное поведение git push с использованием стандартной настройки push.default simple лучше. Это действительно что-то вам покупает, но вам, вероятно, все равно нужно только пихать в один другой Git-репозиторий, так что вы можете выбрать этот конкретный другой Git-репозиторий как (единственный) восходящий поток для ветви.

  • Наконец, команда git status (которую запускают или выполняют некоторые другие команды Git) становится более информативной, сообщая вам, сколько коммитов вы опережаете и отстаете от выбранного восходящего потока. Это включает в себя git branch -v, а также. Я считаю, что это имеет большое значение.

К счастью, есть простой способ получить ту же информацию из командной строки, и вы можете создать псевдоним или скрипт, чтобы сделать это для вас. Когда git status говорит, что вы «впереди 1» и / или «отстаете от 3», он запускает эквивалент:

git rev-list --count --left-right <local-name>...<upstream-name>

Например, с веткой stash-exp, имеющей origin/master в качестве восходящего потока, я могу запустить:

git rev-list --count --left-right stash-exp...origin/master

и получите те же два числа (как необработанные числа): первое - это счет «впереди», а второе - «позади». Обратите внимание на три периода . здесь; для этой формы этой команды и параметров требуются все три, в то время как в большинстве команд вместо этого используется синтаксис из двух точек.

Таким образом, в итоге, установка восходящего потока так, чтобы какое-либо имя локальной ветви отслеживало либо какое-либо имя удаленного отслеживания, либо какое-либо другое имя локальной ветви, имело очень низкую стоимость (одна команда) и некоторые заметные преимущества, поэтому вам следует делай это, когда это имеет смысл. Но преимущества не столь велики, так как необходимо , чтобы иметь более одного восходящего потока.

...