推秘密变更(Push secret changesets)

2019-07-28 20:15发布

这看起来自相矛盾的,我知道这个秘密的变更意味着是私有的,但如果我想要什么备份那些秘密的变更?

我在平行一些分支机构工作,有时我要推一个,而不是其他。 为了实现这个目标,我在不同的克隆工作,但我讨厌这样。

所以,现在有善变的阶段,我可以让秘密分支,在同一个存储库中的一切。 问题是,这个秘密分支,其发布之初之间,我想备份那些秘密的变更(我在另一台机器克隆只是握着我的备份,万一有事与我的本地回购或我的机器)。

是否有这样做的一种方式或我的工作流程是完全地错了吗?

Answer 1:

好像阶段仍然是相对较新,一些工作流程,比如这一点,似乎并没有被列入,但。 截至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阶段)的时刻。 对不起,并希望,我们可以找到一个更好的解决方案,很快!



Answer 2:

无需任何标记秘密。 如果你只是想推一个分支,使用:

hg push -r REV

这将推动REV,只有它的祖先。

秘诀是良好的水银补丁队列修订,因为它们不能无论如何推它可以防止本地克隆抄袭他们。

是好的草案跟踪unpushed变化。 如果你仍想对它们进行备份,推动他们将其翻转到公共的,但你可以重置他们回到草案(相比于另一个仓库)有:

hg phase -fd 'outgoing(URL)'

(URL可以为空默认推回购)。



Answer 3:

最好的办法是@ mischab1的组合的答案 ,@标记tolonen的答案和别名。

按照mischab1的回答,您确保推到您的备份位置将相位不会更改为“公共”。

第二步是到备份位置添加到您的存储库的hgrc /路径:

[paths]
default = ...
backup = backup_location

接下来的步骤是通过别名在全球hgrc定义备份命令,例如“bubr”(用于备份当前分支)或“burev”(备份当前REV)。

[alias]
bubr = push -b . backup
burev = push -r . backup

hg bubrhg burev然后将推动当前分支/修订定义为“备份”的路径的位置。

编辑这仍然有可能会不小心推与“汞推”也是如此定义的所有变化的缺点hg pubr命令来推动当前分支,而不是使用“汞推”每默认可能会有所帮助。



Answer 4:

这是我想出了迄今为止最好的。 我认为其实质上等同于你想推/拉才能够做什么。

  1. 要转移为草稿标记所有秘密的变更
  2. 在源回购运行hg bundle -r last_draft_rev bundlefile.hg path\to\backup\repo
  3. 在目标回购运行hg unbundle bundlefile.hg
  4. 该变更将进入备份为草稿
  5. 唛头变更草案的秘密,它的所有后代将被打上正是如此

我不能让#2工作,如果变更集仍然标示的秘密。



Answer 5:

@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


Answer 6:

最简单的事情,现在天,是通过添加以下到它的hgrc配置文件标记备份库作为非出版。

[phases]
publish = False

见水银的Wiki,获取更多信息。



文章来源: Push secret changesets