Нажимайте секретные наборы изменений
Это может показаться парадоксальным, я знаю, что секретные изменения должны быть частными, но что, если я хочу сделать резервную копию этих секретных наборов изменений?
Я работаю с некоторыми ветвями параллельно, а иногда хочу подталкивать один, но не другие. Для этого я работаю в отдельных клонах, но я ненавижу это.
Итак, теперь у меркуриального есть фазы, я могу создавать секретные ветки и иметь все в одном хранилище. Проблема в том, что между началом секретной ветки и ее публикацией я хочу сделать резервную копию этих секретных наборов изменений (у меня есть клон на другой машине, чтобы хранить мои резервные копии, если что-то происходит с моим местным репо или моей машиной).
Есть ли способ сделать это, или мой рабочий процесс не соответствует действительности?
Ответы
Ответ 1
Похоже, что фазы все еще относительно новы, и некоторые рабочие процессы, такие как это, похоже, пока не включены. По состоянию на 2013-03-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%
Это не изменяет коммит в секретный репозиторий, на который вы нажимаете, я пытался изменить push для этого (но не увенчался успехом):
hg push -f --remotecmd hg phase -sf %secret%
Коммиты должны были бы точно соответствовать работе remote hg command
, но я все равно не мог ее изменить в удаленном репозитории.
=============================================== =============
Если вы хотите использовать графический интерфейс, такой как TortoiseHG Workbench, вам нужно будет сделать все это вручную (измените фазы в графическом интерфейсе в любых репозиториях, которые вы хотите) на данный момент. Извините, и, надеюсь, мы сможем найти лучшее решение, скоро!
Ответ 2
Не нужно ничего скрывать. Если вы хотите только нажать одну ветвь, используйте:
hg push -r REV
Это приведет только к REV и его предкам.
Секрет хорош для пересмотров очередей Mercurial, поскольку они не могут быть нажаты в любом случае, и это мешает локальному клону копировать их.
Черновик хорош для отслеживания непроверенных изменений. Если вы все еще хотите их скопировать, нажатие на них перевернет их в Public, но вы можете reset вернуть их в черновик (по сравнению с другим репозиторием) с помощью
hg phase -fd 'outgoing(URL)'
(URL-адрес может быть пустым для стандартного push-репо).
Ответ 3
Лучший подход - это сочетание @mischab1 answer, @mark-tolonen answer и псевдонимы.
Следуя запросу mischab1, вы убедитесь, что нажатие на резервное копирование не изменит фазу на "общедоступный".
Второй шаг должен заключаться в том, чтобы добавить место резервного копирования в hgrc/paths вашего репозитория:
[paths]
default = ...
backup = backup_location
Следующий шаг - определить команду резервного копирования через псевдоним в глобальном hgrc, например. "bubr" (для резервной текущей ветки) или "burev" (резервный ток rev).
[alias]
bubr = push -b . backup
burev = push -r . backup
hg bubr
или hg burev
будет затем нажимать текущую ветку/ревизию на место, определенное как путь к резервной копии.
Изменить. У этого есть недостаток, который вы могли случайно нажать на все изменения с помощью "hg push", чтобы определить также команду hg pubr
, чтобы нажимать текущую ветку и не использовать "hg push" по умолчанию может быть полезно.
Ответ 4
Это лучшее, что я придумал до сих пор. Я думаю, что он по существу эквивалентен тому, что вы хотите сделать нажатием/тягой, чтобы иметь возможность делать.
- Отметьте все секретные изменения, которые вы хотите перенести как черновик
- В исходном режиме репо
hg bundle -r last_draft_rev bundlefile.hg path\to\backup\repo
- В репозитории назначения
hg unbundle bundlefile.hg
- Изменения внесены в резервную копию как DRAFT
- Отметьте первый черновик изменений как секретный, и все его потомки будут отмечены таким образом
Я не мог заставить # 2 работать, если изменения были по-прежнему выделены в секрете.
Ответ 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
Ответ 6
Самое простое, что нужно сделать сейчас - это пометить ваш резервный репозиторий как непубличный, добавив в свой файл конфигурации hgrc следующее.
[phases]
publish = False
Подробнее см. Mercurial Wiki.