我遇到了一个问题,我"认为"只能使用补丁来解决.
我从我们的主存储库克隆了一个项目,对它进行了一些更改(更新,删除文件和目录以及添加).甚至没有提交这些更改.问题是,来自主存储库的项目已被删除/删除并重新创建为一个新项目(名称相同,所有目录结构都与以前相同).我再次从主存储库克隆了该项目,并希望将所有未提交的更改传输给它.
我仍在探索hg patch解决这个问题.如果有人能够确认创建和添加补丁是正确的方法,那将会有所帮助,任何解释该过程的资源都会有很大的帮助.
Mar*_*ler 23
你是对的 - 你需要一个补丁来将信息从一个存储库传输到另一个存储库(不相关的)存储库.这将起作用,因为文件是相同的,正如您所注意到的那样.
因此,要从old克隆中传输未提交的更改,即可
$ hg diff -g > uncommited.patch
$ cd ../new
$ hg patch --no-commit ../old/uncomitted.patch
Run Code Online (Sandbox Code Playgroud)
这将恢复补丁中保存的信息.这包括有关在旧克隆中添加或重命名的文件的信息.
可以使用标准Mercurial安装执行以下步骤:
C:\>hg init example
C:\>cd example
C:\example>echo >file1
C:\example>hg ci -Am file1
adding file1
C:\example>hg clone . ..\example2
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
C:\example>rd /s/q .hg
C:\example>hg init
C:\example>hg ci -Am same-but-different
adding file1
Run Code Online (Sandbox Code Playgroud)
在这一点上example与example2具有相同的内容,但储存库是彼此无关由于删除和重新初始化.hg文件夹.
现在进行一些更改并在其中一个存储库中提交它们,然后将它们导出为补丁:
C:\example>echo >>file1
C:\example>echo >file2
C:\example>hg ci -Am changes
adding file2
C:\example>hg export -r 1 >patch.diff
Run Code Online (Sandbox Code Playgroud)
下面显示由于重新初始化,其他存储库无法提取更改.但是,它可以成功应用补丁:
C:\example>cd ..\example2
C:\example2>hg pull
pulling from c:\example
searching for changes
abort: repository is unrelated
C:\example2>hg import ..\example\patch.diff
applying ..\example\patch.diff
Run Code Online (Sandbox Code Playgroud)
我会首先复制所有内容,以便您可以回溯。
然后,在进行更改的工作副本中,我将首先删除该目录,然后从新存储库.hg复制该目录。.hg这基本上会将所有更改的文件传输到新的存储库中,而不需要删除任何文件和目录。
您仍然需要告诉存储库是否删除任何标记为丢失的文件。您还必须手动处理重命名。如果这是少量操作,则比尝试使用修补方法更容易。
完成此操作后,提交更改并推送(如有必要)。