将未版本化的文件添加到Subversion

10
是否可以将不需要版本控制的文件添加到Subversion中?例如,需要编辑以匹配每个单独环境的配置文件。当新程序员连接到项目时,他应该从Subversion获取原始文件,但是在他编辑后不会提交,也不会在更新时被覆盖。
也许为整个原始项目创建一个标签是解决方案?首先下载标签,然后从主干进行更新?
有什么想法吗?
澄清如下: 该项目(Sitecore)由大约30,000个不同的文件组成。我们需要对其中约100个进行版本控制。如果我们应该将所有文件包括在版本控制中,则每次提交都需要很长时间(因为Tortoise将搜索所有文件夹)。今天,我们创建一个包含所有未版本控制文件夹的zip文件,并在svn中设置这些文件夹为忽略文件夹,然后添加zip文件。问题是当我们需要更改zip文件中的一个或多个文件时,我们需要向代码库提交一个新的~1GB zip文件。

只是猜测:这些未版本化的文件是数据,而版本化的文件才是实际的软件? - David Dean
不,这不仅仅是数据。它主要是Sitecore CMS。配置文件、二进制文件、图像、文档等等。 - Zooking
6个回答

14
我会把未版本化的文件放在一个网站或文件服务器上,供使用该项目的所有人访问,并添加一个脚本来自动下载文件(如果需要则压缩),并将它们提取到svnignored文件夹中,以便它们不被Subversion捕获。
如果您担心这些文件发生变化,那么:它们应该被版本化吗?
在这种情况下,svn:externals也可能很有用。我认为可以根据情况轻松地设置它们被忽略。

以前没有在svn中使用过模板。如果文件是二进制文件,这种方法是否有效? - Zooking
我所说的模板,只是指创建一个通用版本的文件,该文件位于子版本控制中,但有一个脚本可以自动将通用版本复制到特定版本。 - David Dean
你有什么样的二进制文件需要依赖于某些本地环境?很可能无论是什么,你都可以将其从二进制文件中分离出来。 - drby
对我来说,这似乎是一种困难的方式。我希望能够首先从某个地方获取整个版本,然后再获得已经过版本控制的文件。然而看起来好像不可能。 - Zooking
Larre,你能否就原始问题给我们更多具体信息?我不确定你所说的“从某处获取整个版本,然后获取版本文件”是什么意思。 - David Dean

5

在某些情况下,甚至不需要为每个开发者创建一个web.config文件,因为.Net配置格式允许通过configSource属性覆盖配置文件的特定部分。

configSource属性指定了一个文件名(当该文件存在时)来覆盖指定的代码块,当文件不存在时,则使用原始代码块。

<?xml version="1.0"?>
<configuration>
  <connectionStrings configSource="connections.config">
      <add name="LocalSqlServer" 
           connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
           providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

在开发者系统中,您可以添加一个connections.config文件,并在其中添加与其相关的连接,而其余设置可以共享。(因此,这并不能解决模板问题,但可以帮助您将大型模板管理为多个小型模板)

4
我会创建一个脚本,在运行时生成配置文件。这样,您就不必担心代码版本管理系统会妨碍您的工作。

3
你需要重新思考如何使用Subversion。Subversion存储有关文件的版本信息,没有多余的内容。你不能在Subversion中存储未经版本控制的文件;这没有任何意义。将1GB的zip存储到Subversion中也没有任何好处。
你应该考虑一种方法,使开发人员可以通过用户主目录中的个性化配置文件或环境变量覆盖这些文件中的设置。

2
只需使用模板文件即可完成此操作。假设你的文件名为config.txt,请查看该文件并在需要本地设置的位置插入一些标记,将其重命名为configTemplate.txt并进行提交。然后每个开发人员都应该检出该文件,复制一份,删除文件名中的模板部分(以便每个人都能获取正确的config.txt),并将新文件添加到忽略列表中。然后让每个人手动编辑模板文件中标记的本地设置,或者如果可能的话使用脚本来自动完成。

模板文件永远不会被更改(除非配置文件格式有差异)。

回答您的编辑(和评论):

图像、文档和未自动生成的二进制文件应该全部放在版本控制下。或者至少我没有看到保持它们未版本化的任何好理由。


0
让每个程序员都在自己的分支上工作,并让他们将更改合并回主干/主分支。当然,你的团队成员需要熟练掌握版本控制,并能够使用不仅是checkout、update和commit这些基本命令。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接