#git #scripting #automation
#git #сценарии #автоматизация
Вопрос:
Я бы хотел оформить ветку таким образом, чтобы последующие git push
правильно отправили ее в источник под тем же именем.
Это легко, когда удаленная ветка уже существует
git checkout -b branch origin/branch
Тем не менее, я хотел бы сделать это, даже если origin/branch
ее еще нет.
Ответ №1:
Просто создайте локальную ветку
git checkout -b branch
Удаленный репозиторий ничего не знает о вашей локальной ветке, поэтому вы должны запустить ее в первый раз «вручную»
git push origin branch
Теперь, если вы хотите, чтобы ваш локальный репозиторий позволил ему отслеживать вашу локальную ветку с помощью удаленного
git branch --set-upstream branch origin/branch
Комментарии:
1. Чего бы я хотел, так это избежать нажатия «вручную», так как я не хочу переделывать свои скрипты 😉
2. Это просто для создания удаленного аналога, и это требуется только один раз. После этого задайте восходящий поток (третья команда), у вас все должно быть в порядке.
3. То, что я пишу, является одноцелевой RC-веткой… но если это невозможно, это тоже ответ — спасибо.
4. «Создать удаленную ветку» (используя git push) может заставить это работать, но IMO это определенно НЕ отвечает на вопрос. Я хотел бы иметь возможность отслеживать несуществующую удаленную ветку (когда я инициализирую новый пустой проект).
5. @rektide Что вы хотите отслеживать, если оно не существует? Вы можете ссылаться только на существующие объекты. «Я хочу, чтобы мой стул выглядел как вон тот стул» — «Но там нет стула» 😕 — Честно говоря, я отвечаю на вопрос OPs, но не на ваш, потому что ваш отличается довольно простым ответом: вы не можете.
Ответ №2:
Простого способа нет, AFAIK.
Это моя текущая попытка. Это функция bash, которая настраивает новую локальную ветку таким образом, что git push
из этой ветки выполняется переход к новой удаленной ветке с тем же именем.
function featurebranch() {
if [ "$@" != "" ]; then
git branch "$@" origin/master
git checkout "$@"
git config branch."$@".remote origin
git config branch."$@".merge refs/heads/"$@"
git config branch."$@".rebase true
fi
}
Она должна использовать git config
, потому что при использовании команд git push -u
или git branch --track
или git branch --set-upstream-to
все они связаны с удаленной веткой, которая действительно существует.
Я был бы признателен, если бы какие-либо git-гуру проверили это и указали на любые проблемы. Ta. 😉
Комментарии:
1. Мне это нравится, или, по крайней мере, идея этого. Проблемы (от не-git-master): (1) git-status сообщает, что восходящий поток удален, и предлагает выполнить сброс, (2) Я бы разрешил пользователю указать ветку from и сохранил бы ее как автономный исполняемый скрипт bash, чтобы его можно было назвать «git-featurebranch» и мне не нужно было путаться с псевдонимами. Я могу продолжить, как только протестирую свои моды
2. Грегори — Я разместил свои модификации к этому здесь: gist.github.com/nhed/239aa94078b0b533d6f5
3. Это должен быть одобренный ответ 🙂
Ответ №3:
Git 1.7.0
Во-первых, создать локальную ветку:
git checkout -b new-branch
На данный момент удаленный репозиторий не знает о локальной ветке, поэтому нам нужно нажать на нее и установить ссылку для отслеживания.
git push -u origin new-branch
Git < 1.7.0
Создайте локальную ветку:
git checkout -b new-branch
Git до версии 1.7.0 требовались три команды для запуска ветки и установки ссылки для отслеживания.
git push origin new-branch
git config branch.new-branch.remote origin
git config branch.new-branch.merge refs/heads/new-branch
С псевдонимом (Git 1.7.0 )
Бонус: создайте локальную ветку и отправьте отслеживаемую удаленную ветку одной командой с этим псевдонимом git:
git config --global alias.cb $'!sh -c 'git checkout -b "$0" amp;amp; git push -u origin "$0"''
Затем, чтобы создать новую ветку, вы можете просто запустить:
git cb new-branch
Комментарии:
1. Также можно использовать шаги, подробно описанные в git < 1.7.0 в более поздних версиях, чтобы создать ветку с настроенной отслеживающей веткой без выполнения сетевого запроса, который может быть тем, что искал OP.
git push
Последующее выполнение создаст удаленную ветку.2. Моя настройка:
cb = "!git checkout -b $1; git config branch.$1.remote origin; git config branch.$1.merge refs/heads/$1 #"
Ответ №4:
Проверено. версия git 2.10.1 (Apple Git-78)
1) git checkout -b localBranchNameThatDoesNotExistInRemote
2) Do your changes , and go a git commit
3) git push origin localBranchNameThatDoesNotExistInRemote --force
Примечание. — Поздний завтрак, на котором вы в данный момент находитесь, локальный, и удаленная несуществующая ветка, куда вы пытаетесь зайти, должны иметь одно и то же имя.