这看起来自相矛盾的,我知道这个秘密的变更意味着是私有的,但如果我想要什么备份那些秘密的变更?
我在平行一些分支机构工作,有时我要推一个,而不是其他。 为了实现这个目标,我在不同的克隆工作,但我讨厌这样。
所以,现在有善变的阶段,我可以让秘密分支,在同一个存储库中的一切。 问题是,这个秘密分支,其发布之初之间,我想备份那些秘密的变更(我在另一台机器克隆只是握着我的备份,万一有事与我的本地回购或我的机器)。
是否有这样做的一种方式或我的工作流程是完全地错了吗?
这看起来自相矛盾的,我知道这个秘密的变更意味着是私有的,但如果我想要什么备份那些秘密的变更?
我在平行一些分支机构工作,有时我要推一个,而不是其他。 为了实现这个目标,我在不同的克隆工作,但我讨厌这样。
所以,现在有善变的阶段,我可以让秘密分支,在同一个存储库中的一切。 问题是,这个秘密分支,其发布之初之间,我想备份那些秘密的变更(我在另一台机器克隆只是握着我的备份,万一有事与我的本地回购或我的机器)。
是否有这样做的一种方式或我的工作流程是完全地错了吗?
好像阶段仍然是相对较新,一些工作流程,比如这一点,似乎并没有被列入,但。 截至2013年3月19日,我相信你可以做到这一点的唯一方法是手动更改从秘密阶段公众。
您可以使用命令行下面的命令:
for /f "delims=" %a in ('hg log --template "{rev} " -r "secret()"') do @set secret=%a
hg phase -d %secret%
hg push -f
hg phase -sf %secret%
这不会改变提交到你是推到仓库的秘密,我试图改变推做到这一点(但没有成功):
hg push -f --remotecmd hg phase -sf %secret%
在提交必须完全匹配的remote hg command
工作,但我不能让它改变对远程仓库反正。
================================================== ==========
如果你要使用像TortoiseHG工作台一个GUI,你将不得不手动所有做这个(改变任何你想要的资料库在GUI阶段)的时刻。 对不起,并希望,我们可以找到一个更好的解决方案,很快!
无需任何标记秘密。 如果你只是想推一个分支,使用:
hg push -r REV
这将推动REV,只有它的祖先。
秘诀是良好的水银补丁队列修订,因为它们不能无论如何推它可以防止本地克隆抄袭他们。
是好的草案跟踪unpushed变化。 如果你仍想对它们进行备份,推动他们将其翻转到公共的,但你可以重置他们回到草案(相比于另一个仓库)有:
hg phase -fd 'outgoing(URL)'
(URL可以为空默认推回购)。
最好的办法是@ mischab1的组合的答案 ,@标记tolonen的答案和别名。
按照mischab1的回答,您确保推到您的备份位置将相位不会更改为“公共”。
第二步是到备份位置添加到您的存储库的hgrc /路径:
[paths]
default = ...
backup = backup_location
接下来的步骤是通过别名在全球hgrc定义备份命令,例如“bubr”(用于备份当前分支)或“burev”(备份当前REV)。
[alias]
bubr = push -b . backup
burev = push -r . backup
hg bubr
或hg burev
然后将推动当前分支/修订定义为“备份”的路径的位置。
编辑这仍然有可能会不小心推与“汞推”也是如此定义的所有变化的缺点hg pubr
命令来推动当前分支,而不是使用“汞推”每默认可能会有所帮助。
这是我想出了迄今为止最好的。 我认为其实质上等同于你想推/拉才能够做什么。
hg bundle -r last_draft_rev bundlefile.hg path\to\backup\repo
hg unbundle bundlefile.hg
我不能让#2工作,如果变更集仍然标示的秘密。
@echo off
rem hgfullpull_naive.cmd
setlocal
set SRC_REPO=%~f1
set DST_REPO=%~f2
set TMP_DIR=%TEMP%\%~n0.tmp
set NODES_LIST=%TMP_DIR%\%~n0.%RANDOM%.tmp
if "%SRC_REPO%"=="" exit /b 1
if "%DST_REPO%"=="" exit /b 1
if "%SRC_REPO%"=="%DST_REPO%" exit /b 1
call :ALL
del /Q "%NODES_LIST%"
endlocal
goto :eof
:ALL
md "%TMP_DIR%"
hg log --rev "secret()" --template "{node}\n" --repository "%SRC_REPO%" >"%NODES_LIST%" || exit /b 1
call :CHANGE_PHASE "%SRC_REPO%" --draft
hg pull --repository "%DST_REPO%" "%SRC_REPO%"
call :CHANGE_PHASE "%SRC_REPO%" --secret
call :CHANGE_PHASE "%DST_REPO%" --secret
goto :eof
:CHANGE_PHASE
setlocal
set REPO=%~1
set PHASE=%~2
for /F "eol=; delims= usebackq" %%i IN ("%NODES_LIST%") DO (hg phase %PHASE% --force --rev %%i --repository "%REPO%")
endlocal
goto :eof
最简单的事情,现在天,是通过添加以下到它的hgrc配置文件标记备份库作为非出版。
[phases]
publish = False
见水银的Wiki,获取更多信息。