git别名:使用参数提交&推入一个命令

时间:2011-06-28 11:16:28

标签: git push commit

我试图说服我的同事离开svn并切换到git。我看到的一个问题是:它必须分别执行git commit和git push是复杂且容易出错的。所以我在想一个git ci别名,它提交更改并将其推送到服务器。我知道,怎么做,但是:

问题是,我想给git commit提供像-m“”这样的参数。所以

git ci -m "Cool change"

应该执行

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

我该怎么办?

2 个答案:

答案 0 :(得分:0)

对于将参数添加到多个命令之一作为别名的一般问题,git别名的工作方式几乎与普通的* nix别名完全相同。唯一的区别是除非git别名以!开头,否则假定git应该添加到命令之前。任何与别名结合使用的参数都是前置的,要将参数插入到一个loger命令字符串中,您需要某种shell命令来解析参数。例如,参见this question参数。

但特别针对这个问题。我同意其他人的意见,这是一件有用的事情。如果您要在提交后立即推送,我假设每个用户都有自己的公共私人仓库(只读给其他人),这样推送将“永不”失败,这意味着它与svn的工作方式完全不同;他们必须从不同的回购等地开始。

如果您正在使用一个公开的“主回购”,每个人都会拉动并推动,这将是一个更糟糕的想法,因为当推动不可避免地会在某个时候失败时,他们被训练不使用“提交”然后“推”但使用你的“ci”别名来提交和推送更改;当他们尝试“重新提交”更改时,第二部分将无法运行,因为第一个命令没有以成功状态结束(而是打印no changes added to commit (use "git add" and/or "git commit -a"))。

答案 1 :(得分:0)

你可以“隐藏”git,就像“git achievement”项目一样。这将使您能够添加看起来像git命令的脚本。你的基本流程应该是:

git pull --rebase

所以历史是线性的,就像它们在SVN的更新中所习惯的那样。但是你必须告诉他们他们可能需要摆脱冲突并告诉他们或别名git add -A && git rebase --continue。我建议启用rerere并在整个团队中分享这些决议,并附上一个附加到“别名”的脚本。

接下来,使用以下内容隐藏提交:

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/git-achievements.html

虽然我认为从长远来看这对他们没有帮助,但我希望现在有所帮助。