svn移动目录以重新组织仓库

dlo*_*dlo 8 svn

我有一个包含这样的主目录的svn repo:

/apples/
/bananas/
/pears/
Run Code Online (Sandbox Code Playgroud)

在我的工作副本中,这些实际上是更大树的子目录......

/food/fruit/apples
/food/fruit/bananas
/food/fruit/pears
/food/veggies/asparagus
/food/veggies/broccoli
Run Code Online (Sandbox Code Playgroud)

我想重组我的回购,以便/ food /实际上是回购的根源......但我的工作副本是一个实时服务器,所以我需要非常小心不要破坏任何东西,即使是一分钟.它也是一棵非常大的树,所以回滚错误可能会造成明显的停机时间.

如果这只是在回购中移动文件夹,我想我会知道如何使用svn moverepo参数(我认为这仍然是步骤#1?)...但我不知道如何将更改应用于工作副本,然后添加父文件夹,而不是搞砸现有的工作文件.

我的答案:感谢AH

1)确保repo是最新的,然后在repo中移动分支.这可以使用svn moverepo本身上的命令或通过工作副本上的操作来完成.这不会影响实时工作副本(还没有svn update!).这是简单的部分.

2)svn switch分支机构到新的位置.在这个例子中,虽然水果以前是回购的根源:

svn switch https://host/svn/fruit /food/fruit
Run Code Online (Sandbox Code Playgroud)

我以前不太了解svn switch,但这并不太棘手.这会更改所有.svn元数据,但不会影响实际文件.

3)这是棘手的部分.您需要快速连续执行这些步骤以最大限度地减少停机时间(它们都非常快):

mv /food/fruit /food/fruit-temp
svn co --depth immediates https://host/svn/ /food/
rm -rf /food/fruit
mv /food/fruit-temp /food/fruit
svn update --set-depth infinity /food/
Run Code Online (Sandbox Code Playgroud)

这里发生的事情是checkout与--depth immediates/ food /的内容创建元数据并创建/ fruit/subdir 但不创建其内容(我们需要使用,rm -rf所以我们可以删除水果中的.svn文件夹,但这都是就在那里).然后我们只是重新交换真实内容,现在将父母和孩子拼接在一起.一旦mv完成,我们将重新上线.将set-depth infinity工作副本的范围扩展到您期望的范围.最后,我们可以svn add看到孩子的兄弟姐妹(例如蔬菜).

A.H*_*.H. 10

我的第一个提示是从一个新的工作副本开始,这是不活的.在该工作副本(WC)中,您可以毫无危险地尝试.这就是工作复制的真正含义;-)

另一个提示:使用第二个工作副本将现有结构逐步重新排列到所需的结构中.一切就绪后,请检查.请记住,必须使用svn命令完成重新安排.

然后使用另一个工作副本来检查,您的上一次签入确实是您缩进的内容.

然后,您可以使用普通mv命令更新您的实时工作副本或使用实时站点的最后一个WC的简单开关.

一步步:

svn co $URL new-wc
cd new-wc
svn mkdir food
svn mkdir food/fruit
svn mv apples food/fruit
svn mv bananas food/fruit
svn mv pears food/fruit
svn ci
Run Code Online (Sandbox Code Playgroud)

现在检查一个新的WC验证 - 现场WC仍然没有改变!

cd ..
svn co $URL verify-wc
# take time and verify
Run Code Online (Sandbox Code Playgroud)

现在切换文件系统中的实时WC和验证WC - 如果它们位于同一个文件系统上,则速度很快!

mv live-wc live-wc-old
mv verify-wc/food/fruit live-wc
Run Code Online (Sandbox Code Playgroud)

现在直播WC是固定的.ast块的替代方案可以是:

cd live-wc
svn switch $URL/food/fruit
Run Code Online (Sandbox Code Playgroud)

这不应该耗费任何时间 - 但请先用备份副本检查:-)