Ярлык-эквивалент для git pull из репозитория в текущую ветку - PullRequest
3 голосов
/ 01 декабря 2011

В git я использую команду pull для объединения из другого репозитория, например:

git pull ../mortoray-main/ mortoray-main

Это извлечет и объединит ветку mortoray-main из другого хранилища с текущей веткой в ​​текущем хранилище.

То, что я ищу, это как настроить эквивалентный ярлык, который я могу просто сделать так:

git pull mortoray

В моем gitconfig я добавил это:

[remote "mortoray"]
    url = ../mortoray-main/
    fetch = mortoray-main

Проблема теперь в том, что когда я запускаю git pull mortoray, я получаю сообщение об ошибке: «Вы попросили вытащить с пульта« mortoray », но не указали отделение. Потому что это не настроенный по умолчанию удаленный для текущей ветки вы должны указать ветку в командной строке. "

Как настроить пульт, чтобы ярлык работал как исходная команда pull?


Обратите внимание, что вместо 'git pull mortoray' работает следующее, но, конечно, это не ярлык:

git fetch mortoray
git merge FETCH_HEAD

Это именно то, что делает следующее без использования «пульта»:

git pull ../mortoray-main/ mortoray-main

Итак, вопрос о ярлыке, я хочу команду pull, которая выполняет выборку и объединение для меня, как оригинальная команда pull:

git pull mortoray

Есть ли какая-либо конфигурация, которая заставила бы этот ярлык работать как задумано?

Ответы [ 3 ]

3 голосов
/ 01 декабря 2011

Вы должны убедиться, что ваша ветвь отслеживает вашу mortoray-main ветку репо mortoray:

git branch --set-upstream <your_current_branch> mortoray-main/mortoray

(как описано в " Как сделать так, чтобы существующая ветка git отслеживала удаленную ветвь? ")
Тогда git pull mortoray должна теперь ветвь перебазироваться при извлечении mortoray-main/mortoray ветви.


OP eda-qa-mort-ora-y добавляет:

Тогда это не быстрый путь, поскольку мне нужно постоянно переключать ветку отслеживания.
То есть:

  • эта ветка не отслеживает эту удаленную ветку постоянно, я буду объединяться из разных веток в разное время.
  • Кроме того, эта ветвь фактически уже отслеживает удаленную ветку, которую я хотел бы сохранить как таковую

Что касается ярлыка, для ссылки на текущую ветвь вы можете черпать вдохновение из " git push current branch ", идея которого также применима для git pull, декларирование в .bashrc:

get_git_branch() {
  echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
}
alias gpull='git pull mortoray-main `get_git_branch`'

Если вы хотите добавить параметры для репозитория в восходящем направлении (т. Е. Не всегда извлекать из mortoray-main и для конкретной локальной ветви, имя которой отличается от ветки в восходящем направлении)

alias gpull='git pull ${1:-origin} $2:`get_git_branch`'

затем gpull mortoray-main mortoray должен выбрать правильную ветвь и перебазировать вашу текущую ветвь.

OP edA-qa mort-ora-y упоминает :

Я не хочу указывать имя локальной или удаленной ветви - я всегда буду тянуть из ветви с именем mortoray-main во все, что будет моей локальной ветвью.

Итак, этот псевдоним должен работать:

gpull='git pull mortoray mortoray:`get_git_branch\`'
0 голосов
/ 03 декабря 2011

РЕДАКТИРОВАНИЕ: Я вижу, что вы уже отвергли это - я думаю, я знаю, что вы пытаетесь сделать, и вы можете использовать псевдоним ...

По сути, вам нужно добавить ту удаленную ветку с той «удаленной», которая была у вас в первом посте. На этом этапе вы сможете git fetch, и у вас будет ветка mortoray/mortoray-main в репо (это удаленная ветка).

Процесс отсюда - git fetch && git merge, сидя на ветке, в которую вы хотите слить ее. Это можно превратить в псевдоним в вашем файле .git / config или ~ / .gitconfig. Должно быть что-то вроде (вам может понадобиться или не потребоваться часть git перед двумя командами):

alias pullmortoray = git pull && git merge

Затем вы набираете (с табуляции) git pullmortoray, и вуаля!

БЕЗУСЛОВНО НИЖЕ !!! для потомков, если кто-то уже прокомментировал.

Вы фактически почти поняли это в своем вопросе - пульт ДУ верен, вам просто нужно настроить локальную ветку для отслеживания ветви ../mortoray/mortoray-main.

git branch --set-upstream <current-branch> mortoray/mortoray-main

сделайте это для каждой ветви, с которой вы хотите отслеживать ветку mortoray-main, и тогда простой git pull сделает свое дело.

0 голосов
/ 01 декабря 2011

Я считаю, что на ваш вопрос уже дан ответ здесь .Вы нуждаетесь в этом .git/config:

[branch 'mortoray-main']
    remote = mortoray                 # set mortoray as default remote for this branch
    merge  = refs/heads/mortoray-main # set mortoray-main as default remote branch to merge
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...