我对Git很满意,而且我已经用了一年多了。更好的是,我终于说服了一个客户转用它!然而,我只是被困在如何完成我要描述的,或者如果这是可能的。即使它可以做到,我想知道它是否会让我们陷入一个混乱的、无法管理的存储库。
单个文件
用于生产,然后使用标记更新服务器。不幸的是,这导致了草率的做法,比如一起提交不相关的更改,然后在事后标记文件,并在主工作树中保留大量垃圾文件,等等。。。开发人员想知道如何做到以下几点:
在他们的本地repos中,他们进行黑客攻击并提交给他们的心,然后在一天结束时,能够运行一个命令,获取一个文件列表,这些文件在一天中的提交与他们的本地prod合并-并且只有这些文件-即使这些提交合并了对其他文件的更改。
我知道怎么和你分手
git rebase --interactive
,但我完全不知道如何自动拆分提交,更不用说我想要的方式了。
我意识到最简单的事情就是告诉他们切换prod分支,将主分支中的文件签出到工作树中,然后提交到prod。我的问题是丢失了他们一天中提交的历史记录。
有没有其他人用脚本或其他什么东西来解决这个问题,或者我必须激励开发人员做出更好的行为,让他们冒着完全拒绝Git的风险?
我终于想出了一个解决办法。这是一个简单的shell脚本,它似乎完全符合我的要求,即使它不是最优雅的解决方案。我只测试了几个场景,但是文件的更改历史记录被保留了下来,如果dev分支的提交后来被合并到整个git中,那么它看起来会很干净!
#!/bin/sh
set -e
dest_branch=$1
file=$2
current_branch=$(git branch | sed 's/^\* //;/^\s/d')
(
set -e
git format-patch --stdout --full-index -M -C -B --ignore-if-in-upstream $dest_branch -- $file
git checkout $dest_branch
) | git am
git checkout $current_branch