我有原始 subversion repo的工作副本。我想对工作副本中的某些文件进行实验性更改,而无需在原始存储库中进行分支,标记等操作。
我知道external
属性。我认为这是关键,但我必须滥用乌龟界面,因为我无法解决问题。
external
属性。答案 0 :(得分:2)
让我们来看看你想要什么。我打算对它们进行编号,以便我以后可以参考它们......
根据#2,您永远不会将此代码合并到原始代码中。没关系。你可以拥有分支,永远不会对它们做任何事情。根据Point#4,您甚至不想同步回原始回购。一旦进行了更改,您就不会想要回购中的新内容。
第1点和第3点让我感到困惑。您是什么意思能够随时轻松回到原始?您是否意味着必要时应将原始回购的更改放入您的内容中?并且,您对许多离散实验的意义是什么?你是说你想尝试原始变化的不同方向吗?
什么阻止您查看基本代码,只是创建自己的私有存储库?
您可以使用分支进行许多离散实验,只需在原始代码库中反复分支即可通过创建标记进行标记。只需返回标签,您就可以随时返回原来的 。
那会有用吗?
$ # First create the experimental repo
$ cd $HOME/my_repo
$ svnadmin create my_repo
$ # Now let's start it up
$ svnserve -r . -d
$ # Now, let's do a checkout and get some work done!
$ mkdir $HOME/my_workspace
$ cd $HOME/my_workspace
$ svn co svn://localhost my_project
$ cd my_project
$ # This is an empty directory. Let's fill it up!
$ svn mkdir trunk tags, branches
$ cd truck
$ # Now, get the revision you want and put it in your repository
$ svn export http://server.com/src/trunk/project .
$ # We have all of the code, let's add it to our repository
$ svn add *
$ cd ..
$ svn commit -m"Original code" #This is your original
$ # Now, we'll mark the original, so you can get back to it
$ svn cp -m"Tagging original" svn://localhost/trunk svn://localhost/tags/ORIGINAL
现在,您拥有自己的存储库,因此您的更改不会显示在原始存储库中。而且,您可以通过查找ORIGINAL
标记返回原始来源。
让我们做三个实验
$ svn cp -m"Experiment #1" svn://localhost/tags/ORIGINAL svn://localhost/branches/experiment_1
$ svn cp -m"Experiment #2" svn://localhost/tags/ORIGINAL svn://localhost/branches/experiment_2
$ svn cp -m"Experiment #3" svn://localhost/tags/ORIGINAL svn://localhost/branches/experiment_3
请注意我是如何从ORIGINAL
标记中分支出来的?这样,我知道我回到原来的代码。请注意,分支用于每个实验。我可能永远不会在它们之间合并,但那没关系。没有什么说你必须从一个分支合并到下一个分支。
并且,您可以在完成实验后随时删除分支:
$ svn delete svn://localhost/branches/experiment_1
这仍然在存储库中,但在HEAD上执行svn ls
时,您将不会再看到它。但是,如果需要,它仍然可以访问。它会使分支混乱,但如果你再次需要它,它仍然可用。
所以,不要担心外部因素,只需创建一个新的存储库,导入代码,并享受乐趣。
然而,当有人想在我的系统上做这样的事情时,我通常会劝阻它,并给他们一个他们可以在原始存储库上玩的分支。例如,我可能会给bob一个名为/branches/BOB/trunk
,branches/BOB/branches
branches/BOB/tags
的目录。通过这种方式,标志着这是Bob的私人区域,他可以随心所欲地做任何他想做的事情。与此同时,Bob可以从repo中反复获取代码,甚至可以捕获更新的代码。如果很多人想要这样做,我会在初始层次结构中添加一个私人文件夹:
/trunk
/branches
/tags
/private
并在/ private下为每个用户提供自己的目录。我有一个预提交钩子,可以防止用户触摸其他用户的代码。通过将所有内容保存在存储库中,我们可以提用户可以共享代码,进行不同的修订,并进行游戏。我从来没有在主存储库中保存私有实验的问题。