git alias: фиксация с аргументами и push в одной команде - PullRequest
6 голосов
/ 28 июня 2011

Я пытаюсь убедить своих коллег оставить svn и переключиться на git. Одна проблема, которую я вижу, состоит в следующем: это сложно и подвержено ошибкам, когда нужно делать git commit и git push отдельно. Поэтому я думал о псевдониме git ci, который фиксирует изменения и передает их прямо на сервер. Я знаю, как это сделать, но:

Проблема в том, что я хочу дать аргументы типа -m "" для git commit. Так

git ci -m "Cool change"

должен выполнить

git commit -m "Cool change" && git push

Как я могу это сделать?

Ответы [ 2 ]

0 голосов
/ 28 июня 2011

вы можете «спрятать» git так же, как проект «git достижение». Это позволит вам добавлять скрипты, которые выглядят как команды git. Ваш основной поток должен быть:

git pull --rebase

так, чтобы история была линейной как то, к чему они привыкли в обновлении SVN. Но вы должны сказать им, что им может понадобиться избавиться от конфликтов и рассказать им или псевдоним git add -A && git rebase --continue. Я предлагаю включить повторное чтение и поделиться этими решениями в команде с помощью сценария, прикрепленного к «псевдониму», который вы собираетесь сделать для этого.

Далее, скрыть коммит что-то вроде этого:

git add -A
git commit -m "message"
git pull --rebase
git push origin <current branch> # or set up tracking and omit the last 2 args

Они также должны корректно выходить из строя при конфликтах.

вот ссылка на достижения git:

http://benjamin -meyer.blogspot.com / 2010/03 / ГИТ-achievements.html

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

0 голосов
/ 28 июня 2011

Для общей проблемы добавления аргументов к одной из нескольких команд в качестве псевдонима псевдоним git работает почти так же, как обычный псевдоним * nix. Единственное отличие состоит в том, что если псевдоним git начинается с !, предполагается, что к команде должен быть добавлен git. Любые аргументы, используемые в сочетании с псевдонимом, добавляются заранее, чтобы вставить аргумент в строку команд журнала, вам понадобится какая-то команда оболочки для анализа аргументов. См. Например этот вопрос для аргументов.

Но для этого вопроса, в частности. Я согласен с другими, что это полезная вещь. Если вы собираетесь использовать push сразу после фиксации, я предполагаю, что у каждого пользователя есть свое собственное публичное частное репо (только для чтения для других), так что push никогда не завершится неудачей, что означает, что в любом случае он работает совсем не так, как svn; они должны вытащить из разных репо и т. д.

Если вместо этого вы используете одно общедоступное «главное репо», к которому все тянут и толкают, это было бы еще худшей идеей, поскольку, когда пуш неизбежно когда-нибудь неизбежно потерпит неудачу, их обучают не использовать «коммит», тогда «push», но используйте псевдоним «ci» для фиксации и отправки изменений; Когда они пытаются «повторно зафиксировать» изменения, вторая часть не запускается, потому что первая команда не завершается со статусом успеха (вместо этого выводится no changes added to commit (use "git add" and/or "git commit -a")).

...