我有一个个人的Mercurial存储库,可以跟踪我正在进行的一些更改.我想与协作者分享这些更改,但是他们没有/不能获得Mercurial,因此我需要发送整个文件集,协作者将在他们的末尾合并.我正在寻找一种方法来提取在两个修订号之间修改的文件子集的"提示"版本.有没有办法在Mercurial中轻松完成此操作?
添加赏金 - 这对我们来说仍然是一种痛苦.我们经常与内部"客户"合作,他们将我们的源代码版本作为.zip,测试一个小的修补程序更容易分发为.zip叠加而不是补丁(因为我们经常不知道他们的文件的状态).
Dan*_*Dan 13
最好的情况是对这些人施加适当的压力以获得Mercurial,但除此之外,补丁可能比压缩文件集更好,因为补丁将跟踪删除和重命名.如果你还想要一个zip文件,我写了一个制作zip文件的简短脚本:
import os, subprocess, sys
from zipfile import ZipFile, ZIP_DEFLATED
def main(revfrom, revto, destination, *args):
root, err = getoutput("hg root")
if "no Merurial repository" in err:
print "This script must be run from within an Hg repository"
return
root = root.strip()
filelist, _ = getoutput("hg status --rev %s:%s" % (revfrom, revto))
paths = []
for line in filelist.split('\n'):
try:
(status, path) = line.split(' ', 1)
except ValueError:
continue
if status != 'D':
paths.append(path)
if len(paths) < 1:
print "No changed files could be found."
return
z = ZipFile(destination, "w", ZIP_DEFLATED)
os.chdir(root)
for path in paths:
z.write(path)
z.close()
print "Done."
def getoutput(cmd):
p = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return p.communicate()
if __name__ == '__main__':
main(*sys.argv[1:])
Run Code Online (Sandbox Code Playgroud)
用法是nameofscript.py fromrevision torevision destination.例如,nameofscript.py 45 51 c:\updates.zip
抱歉可怜的命令行界面,但嘿脚本只用了25分钟就写了.
注意:这应该从存储库中的工作目录运行.
Nic*_*zet 10
好.hg export $base:tip > patch.diff将生成一个标准的补丁文件,大多数工具都可以读取.
特别是,GNU patch命令可以将整个补丁应用于以前的文件.还不够吗?我不明白为什么你需要这些文件:对我来说,应用补丁似乎比从zip中提取文件并将它们复制到正确的位置更容易.此外,如果您的协作者有本地更改,您将覆盖它们.您没有使用版本控制工具直接强制其他人手动合并更改,对吧?让我们patch对付的是,诚实:)
在UNIX中,这可以通过以下方式完成:
hg status --rev 1 --rev 2 -m -a -n | xargs zip changes.zip
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4673 次 |
| 最近记录: |