我在3人团队中工作,我们通常不会编辑相同的文件。当我发送更改时,我会提交并推送。通常这有效。
然而,有时候,我们正处于竞争中。如果有人在我做之前推动,我会得到失败的推动
$ git push
X11 forwarding request failed on channel 0
To git@gitlab.ku.edu:crmdaprojects/Ticket-631.git
! [rejected] reports2016 -> reports2016 (fetch first)
error: failed to push some refs to
'git@gitlab.ku.edu:crmdaprojects/Ticket-631.git'
hint: Updates were rejected because the remote contains work
that you do
hint: not have locally. This is usually caused by another
repository pushing
hint: to the same ref. You may want to first integrate the
remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help'
for details.
我是唯一一个编辑过我提交过的文件的人。如果我的更改通过,它不会损害项目。我没有编辑队友输入的任何文件。不幸的是,他们改变了一个完全不同的目录。天哪,我希望我的承诺不会分散注意力。
我明白这不是git想要做的事情。所以我按照提示
$ git pull
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 5 (delta 3), reused 0 (delta 0)
Unpacking objects: 100% (5/5), done.
From gitlab.ku.edu:crmdaprojects/Ticket-631
04cb4c6..05b2c2f reports2016 -> origin/reports2016
Merge made by the 'recursive' strategy.
WI/R/import.R | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
这种拉动导致合并,编辑器弹出打开,我被要求解释为什么我导致合并。我输入的所有内容都是“我运行git pull,我不知道正在合并什么冲突”,因为从该vi会话的内部,我甚至无法判断git改变了哪些文件。在我保护提交消息后,我看到它只编辑了一个文件“import.R”。
这个文件“import.R”,不是我工作的。周末队友改变了这一点,在我有机会做到这一点之前,他推了推。据我所知,此更新无害。拉扯并不危险。
然而,这种工作流程不方便。每当我想要推动我这个更大项目的一部分时,推动失败了,我必须拉,然后尝试了解发生了什么。如果我每天工作8小时,我会浪费20或30分钟来弄清楚为什么推送失败或拉动导致合并错误。
我想知道是否有一个不那么恶化的工作流程。当项目中有10个程序员并且他们一直在进行更改时,程序员如何保持理智?有没有一种很好的方法可以知道我正在编辑的任何文件是否已在遥控器中更改?如果不是,那么我不介意拉动,我只是继续前进,如上面的情况。我可能想快速了解一下有哪些变化,但这不是我现在的首要任务。我最关心的是拉动我正在修改的文件中的更改。
从git手册中,我可以看到很长的路要走:
$ git fetch
$ git diff
然后我趟过一些输出。有没有更好的方法将其纳入我的日常工作流程?
答案 0 :(得分:0)
我认为你的挫败感源于你还不习惯git的事实。拉动和推动应该花费大约30秒,通常更少。
git不关心你是否在触摸同一个文件。事实上,你也不应该关心。如果某人更改了项目中的文件,他们很可能只是破坏了您正在处理的代码。代码不与它所写的文件隔离。通常应该总是拉,构建,测试,推送。
但是,如果在同一行中的同一文件中进行 更改,则会产生真正的冲突,您需要解决此问题。如果您不想每次提取合并提交,则需要运行以下命令以全局配置:
git config --global --add merge.ff true
或者对于当前的拉动:
git pull --ff-only
这将阻止合并提交被创建。但是,git通常会预先填充合并提交注释,因此您可以按原样保留配置,并在合并时单击“okay”(假设没有冲突)。
最后,人们在他们自己的分支上工作是很常见的,只有当他们的功能完成时才会合并回dev / master(也就是说,你只需要为每个功能合并一次,禁止修复等)。这样你就不会得到冲突或者不得不进行改变