让我们看看你想要什么。我要给它们编号,以便我以后可以参考它们……
- 能够随手点回原来的随意。
- 无意将更改合并回原始 repo 主干。
- 捕获许多离散的“实验”,尽可能少地捕获代码并将其全部排除在原始存储库之外。
- 不需要与特定的原始 repo 版本同步。
- 我希望能够从原始 repo 的工作副本开始,并以特定文件夹和/或文件为目标以进入实验性 repo。
根据#2,您永远不会将此代码合并到原始代码中。没关系。您可以拥有分支机构,但永远不要对它们做任何事情。根据第 4 点,您甚至不想同步回原始存储库。完成更改后,您将不希望从 repo 中获得更新的内容。
第 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
svn ls
这仍然在存储库中,但在 HEAD 上执行时您将不再看到它。但是,如果需要,它仍然可以访问。它可以防止杂乱无章的分支,但如果您再次需要它,它仍然可以使用。
所以,不用担心外部因素,只需创建一个新的存储库,导入您的代码,然后玩得开心。
然而,当有人想在我的系统上做这样的事情时,我通常会劝阻它,并给他们一个可以在原始存储库上使用的分支。例如,我可能会给 bob 一个名为/branches/BOB/trunk
,的目录branches/BOB/branches
branches/BOB/tags
。这样,就标明这是 Bob 的私人区域,他可以到处玩耍,为所欲为。同时,Bob 可以一遍又一遍地从 repo 中获取代码,甚至捕获更新的代码。如果很多人想要这样做,我将在初始层次结构中添加一个私有文件夹:
/trunk
/branches
/tags
/private
并在 /private 下为每个用户提供自己的目录。我有一个预提交钩子,可以防止用户接触其他用户的代码。通过将所有内容都保存在存储库中,我们拥有了更大的灵活性。用户可以共享代码、进行不同的修订并进行尝试。在主存储库中保留私有实验时,我从来没有遇到过问题。