4

我从事一个大型项目,其中所有源文件都存储在版本控制中,项目文件除外。这是首席开发人员的决定。他的理由是:

  • 协调开发人员工作目录之间的差异非常耗时。
  • 它允许开发人员独立工作,直到他们的更改稳定

相反,开发人员最初会获得其他开发人员的项目文件的副本。然后,当添加新文件时,每个开发人员都会通知所有其他人有关更改的信息。从长远来看,这让我感到更加耗时。

在我看来,不跟踪项目文件更改的所谓好处被危险超过了。除了对其所需源文件的引用之外,每个项目文件都有配置设置,如果它被损坏或出现硬件故障,这些配置设置将非常耗时且容易出错。其中一些嵌入了几乎无法恢复的源代码。

我试图说服领导,他的两个理由都可以通过以下方式完成:

  • 同意标准文件夹结构
  • 在项目文件中使用相对路径
  • 更有效地使用版本控制系统

但到目前为止,他不愿意听从我的建议。我检查了 svn 日志,发现每个主要版本的历史记录都以 Add 开头。我有一种感觉,他根本不知道如何使用分支功能。

我什么都不担心,还是我的担心有效?

4

5 回答 5

4

你的担忧是有道理的。没有充分的理由从存储库中排除项目文件。他们绝对应该受到版本控制。您还需要对自动化构建的目录结构进行标准化,因此您的领导只是推迟了不可避免的事情。

以下是将项目 (*.*proj) 文件检查到版本控制中的一些原因:

  • 避免不必要的构建中断。每次添加、删除或重命名源文件时,依靠单个开发人员通知团队其他成员是不可持续的做法。会出现错误,您最终会得到损坏的构建,您的团队将浪费宝贵的时间来尝试确定构建损坏的原因。

  • 维护权威的源配置。如果存储库中没有项目文件,则您没有足够的信息来可靠地构建解决方案。您的团队是否计划从您的开发人员的一台机器上交付构建?如果有,是哪一个?拥有源代码控制存储库的全部意义在于维护一个权威的源配置,您可以从中构建和交付版本。

  • 简化项目的管理。当您引入并非每个人都熟悉的项目类型时,让每个团队成员独立更新他们的各种项目文件的个人副本会变得更加复杂。如果需要引入 WiX 项目来生成 MSI 包或数据库项目会怎样?

我还认为,为捍卫这种不签入项目文件的策略而提出的两点很容易被驳斥。让我们来看看每个:

协调开发人员工作目录之间的差异非常耗时。

源配置应始终使用相对路径进行设置。如果您的源配置(项目文件、资源文件等)中有硬编码路径,那么您做错了。选择忽略问题不会让它消失。

它允许开发人员独立工作,直到他们的更改稳定

不,使用版本控制可以让开发人员独立工作,直到他们的更改稳定为止。如果你们每个人都继续维护自己的项目文件的单独副本,一旦有人签入引用新源文件中的类的更改,那么您已经破坏了团队中的每个人,直到他们停止正在做的事情并且仔细更新他们的项目文件。将这种体验与仅从源代码控制中“获取最新信息”进行比较。

于 2010-06-24T15:02:31.743 回答
0

我认为这取决于项目的IDE和配置。一些 IDE 具有硬编码的绝对路径,这对于多个开发人员使用不同的本地副本和配置处理相同的代码来说是一个真正的问题。例如,如果可以,请避免对库的绝对路径引用。

在 Eclipse(和 Java)中,可以提交.project.classpath文件(只要类路径没有绝对引用)。但是,您可能会发现使用 Maven 之类的工具可以帮助您从 IDE 和个人设置中获得一些独立性(在这种情况下,您不需要提交.project.settings并且.classpath在 Eclipse 中,因为 m2eclipse 会自动为您重新创建它们)。这可能不适用于其他语言/环境。

此外,如果我需要引用一些真正特定于我的机器的东西(配置或文件位置),它往往会在 Git 中拥有我自己的本地分支,我会在必要时对其进行 rebase,只将公共部分提交到远程存储库。Git diff/rebase 运行良好:即使本地更改影响已远程修改的文件,它也往往能够计算出差异,除非这些更改发生冲突,在这种情况下,您有机会手动合并更改。

于 2010-06-24T15:19:17.257 回答
0

通常,从 SVN 签出的项目应该可以工作,或者应该包含使其工作的工具(例如 autogen.sh)。如果项目文件丢失,或者您需要了解项目中应包含哪些文件,则说明缺少某些内容。

自动生成的文件不应该在 SVN 中,因为跟踪这些文件的更改是没有意义的。

于 2010-06-24T15:04:09.007 回答
0

具有相对路径的项目文件属于源代码管理。

没有的文件:例如在 .Net 中,我不会将 .suo(用户选项)web.config(或 app.config 置于源代码控制之下。您可能有开发人员使用不同的连接字符串等。

对于 web.config,我喜欢将 web.config.example 放入其中。这样,您可以在初始结帐时将文件复制到 web.config 并调整您想要的设置。如果您添加一些需要添加到所有 web.config 的内容,则将这些行合并到 .example 版本中,并通知团队将其合并到他们的本地版本中。

于 2010-06-24T15:05:24.870 回答
0

那只是迟钝。通过这样的设置,我可以拥有一个完美运行的项目,其中包含与其他人略有不同的文件。想象一下,如果有人不小心将这个烂摊子传播到 QA 中,而每个人都试图弄清楚发生了什么,这将造成多大的破坏。想象一下,如果它被发布到生产环境中将会发生的灾难......!

于 2010-06-24T17:45:10.537 回答