0

我有原始颠覆回购的工作副本。我想对工作副本中的某些文件进行实验性更改,而不在原始存储库中进行分支、标记等。

目标

  • 能够随手点回原点
  • 无意将更改合并回原始repo 主干。
  • 捕获许多离散的“实验”,尽可能少地捕获代码
  • 并将其全部排除在原始存储库之外。
  • 不需要与特定的原始repo 版本同步。
  • 我希望能够从原始repo 的工作副本开始,并以特定文件夹和/或文件为目标以进入实验性repo。

细节是魔鬼

我知道external财产。我认为这是关键,但我一定是误用了乌龟界面,因为我无法解决问题。

  • 从原始回购的工作副本开始...
  • 我已经创建了实验性repo 和最小的文件夹结构
  • “签出”到我要试验的文件夹。
  • R-单击/添加目标文件夹。此时乌龟挂起然后中止。
  • R-click/properties 在目标文件夹上,external使用本地路径和 URL 创建属性。
  • 目标文件夹上的 R-click/Update... 会导致乌龟挂起然后中止。
  • 试图“导出”该文件夹以从原始文件夹中取消版本
  • 注意:我没有对原始存储库的管理员级别访问权限。

请不要

  • 建议我研究 Stack Overflow
  • 建议我使用代码库的完整副本创建实验性存储库。
4

1 回答 1

2

让我们看看你想要什么。我要给它们编号,以便我以后可以参考它们……

  1. 能够随手点回原来的随意。
  2. 无意将更改合并回原始 repo 主干。
  3. 捕获许多离散的“实验”,尽可能少地捕获代码并将其全部排除在原始存储库之外。
  4. 不需要与特定的原始 repo 版本同步。
  5. 我希望能够从原始 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 下为每个用户提供自己的目录。我有一个预提交钩子,可以防止用户接触其他用户的代码。通过将所有内容都保存在存储库中,我们拥有了更大的灵活性。用户可以共享代码、进行不同的修订并进行尝试。在主存储库中保留私有实验时,我从来没有遇到过问题。

于 2012-05-10T14:34:53.730 回答