Как настроить git push для автоматической установки upstream без -u?
Я хочу, чтобы git push origin
автоматически устанавливал восходящую ссылку, когда я впервые вставляю локально созданную ветвь.
Я знаю о git push -u
, но я не хочу думать о том, использовал ли я ранее -u
или иным образом установил ссылку на восходящий поток. Другими словами, я хочу, чтобы git push
автоматически выполнял эффект git push -u
при любом нажатии ветки, которая еще не имеет восходящего потока.
Возможно ли это? Если для этого требуется псевдоним или утилита script, это прекрасно.
Ответы
Ответ 1
Так как я не думаю, что это возможно с помощью git config, вот что вы можете сделать в bash:
[[ $(git config "branch.$(git rev-parse --abbrev-ref HEAD).merge") = '' ]] && git push -u || git push
Если текущая ветка имеет ветвь удаленного отслеживания, она вызывает git push
, иначе она вызывает git push -u
Ответ 2
Примечание: тот факт, что новая политика push по умолчанию "simple
" основана на ветке, имеющей восходящий поток, означает:
настройка ветки вверх по течению рассматривается как добровольный шаг, а не скрытая автоматическая
Когда "git push [$there]
" не говорит, что нажать, мы использовали традиционную семантику соответствия (все ваши ветки были отправлены на удаленный компьютер, если там уже есть ветки с таким же именем),
Мы будем использовать семантику "simple
", которая толкает текущую ветвь к ветки с тем же именем, , только если текущая ветвь настроена на интеграцию с этой удаленной ветвью.
Для изменения этой настройки существует пользовательская конфигурация конфигурации "push.default
".
Поэтому, создав mechanicalfish , вы можете определить псевдоним, с правой двойной кавычки ("
) экранированы (\"
):
git config alias.pu "![[ $(git config \"branch.$(git rev-parse --abbrev-ref HEAD).merge\") = '' ]] && git push -u || git push"
git pu origin
Sc0ttyD предлагает в комментариях следующий псевдоним:
alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push'
В нескольких строках:
alias gpu='[[ -z $(git config "branch.$(git symbolic-ref --short HEAD).merge") ]] &&
git push -u origin $(git symbolic-ref --short HEAD) ||
git push'
Ответ 3
У меня была такая же проблема. Я нашел этот псевдоним (.gitconfig)
[alias]
track = "!git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`"
Использование: git track
один раз на новую ветку (в настоящее время выведено). Затем просто нажмите как обычно:)
Ответ 4
Ответы @VonC и @Frexuz полезны, но оба их решения создают ошибку для меня. Используя оба ответа, я объединил то, что работает для меня:
[alias]
pu = ![[ $(git config "branch.$(git symbolic-ref --short HEAD).merge") = '' ]] && git push -u origin $(git symbolic-ref --short HEAD) || git push
Это приводит к выполнению либо git push -u origin $BRANCHNAME
, либо git push
, в зависимости от того, определена ли его upstream (свойство branch.$BRANCHNAME.merge
).
Ввод этого псевдонима в командной строке потребует escape-кодов, поэтому, возможно, проще всего использовать редактор для вставки в правильный файл ($HOME/.gitconfig
(глобальный), .git/config
(локальный)) или /etc/gitconfig
(система ))
Ответ 5
Я решил эту проблему, используя этот простой Bash script. Он не будет работать с существующими ветвями, но если вы создадите все свои ветки с помощью этой функции, вы всегда будете иметь свою ветвь вверх по течению автоматически.
function con { git checkout -b $1 && git push --set-upstream origin $1; }
$1 представляет первый аргумент, который вы передаете после con
, поэтому он просто выполняет:
git checkout -b my-new-branch && git push -u my-new-branch
... просто сделав это:
con my-new-branch
Ответ 6
Я сделал расширение git с полезными скриптами, включая этот:
usage: git line push
Push the current branch and set an upstream if needed.
https://github.com/jvenezia/git-line
Ответ 7
git fetch origin
git push origin
^ это устанавливает вверх по течению для меня
Ответ 8
Просто:
$ alias gush="git push -u origin HEAD"