我试图说服我的同事离开svn并切换到git。我看到的一个问题是:它必须分别执行git commit和git push是复杂且容易出错的。所以我在想一个git ci别名,它提交更改并将其推送到服务器。我知道,怎么做,但是:
问题是,我想给git commit提供像-m“”这样的参数。所以
git ci -m "Cool change"
应该执行
git commit -m "Cool change" && git push
我该怎么办?
答案 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
虽然我认为从长远来看这对他们没有帮助,但我希望现在有所帮助。