How to deal with files that are relevant to version control, but that frequently change in irrelevant ways?
.dproj文件对于Delphi项目是必不可少的,因此它们必须处于版本控制之下。
这些文件由IDE控制,还包含一些经常更改但与版本控制完全无关的信息。
例如:我经常更改应用程序的启动参数(一天几次),但如果只更改了处理启动参数的部分,则不希望意外地提交项目文件。
那么如何处理这种情况呢?
一个干净的解决方案是将文件分开,但使用DelphiIDAfaik是不可能的。
可以忽略文件的特定部分吗?
我们现在正在使用Subversion,但可能很快就会迁移到Git。
- 当您仍在使用SVN时,您可以使用"SVN:Needs Lock"属性来防止人们意外地修改项目文件。
在我们的例子中,开发人员很少对.bdsproj,.dpr,.res文件进行有意义的更改。因此,我们拒绝提交(Subversion中的预提交挂钩),除非提交注释中存在特殊标记:【添加项目文件】或【添加res文件】。这可以防止对这些文件进行"无耻"的更改。
对于StartParameters的特定情况:众所周知的Andreas Hausladen的DDevextentons插件允许将Start参数单独存储在dproj文件中。在他的站点上查看有关DDevextensions的更多详细信息。
编辑:如果我没记错的话,这项功能的创建仅仅是因为他在启动参数和版本控制方面有那个问题。
- +1我安装了DDevextensions,但我不知道。安德烈亚斯真是太棒了:)。
svn/git无法"知道"文件的哪些位是重要的,而将对您来说重要的内容提交或不提交到文件"位"中是很困难的(尤其是当您不清楚信息在其中的结构时)。最实际的解决方案是检查对文件所做的更改,并决定是否将它们提交到存储库。
您可以决定要用git提交文件的哪些部分。然而,这并不是你想要的自动化过程。
- 我想你是对的。实际上,我在使用git-svn dcommit将Git工作副本的更改推送到SVN时遇到了问题。这与一个叫做smartgit的前端可能出现的问题有关,我现在要向开发人员报告这个问题。
- 当有任何未限制的更改时,我无法推送,这部分是由于Git SVN的错误,部分是由于SmartGit的错误。
- 好的,smartgit支持git stash,这是giv-svn限制的可接受的解决方法:stackoverflow.com/questions/39651/git-stash-vs-git-branch
如本文所述,在git update-index 上使用--assume-unchanged选项,stackoverflow/假设不变。
你可以为那些需要它的人制作简单的别名。
- 我们主要是GUI用户,我们的GUI客户机不支持这一点(AFAICS),但除此之外,这是一个好主意。
- 但是有一个问题:如果您真的必须提交文件,并且不小心忘记了它,那么更改可能会丢失。
- 关于这个(额外的文档):article.gmane.org/gmane.comp.version-control.git/181816:要查看哪些文件设置了"假定不变"位,请使用git ls-files -v。不过我还没检查这个。
我不会在版本控制中直接保存.dproj文件,而是提供一个默认文件,用户应该重命名该文件以使有缺陷的delphi正常工作。
- 这与--assume-unchanged开关有着相同的缺点,改变可能会丢失。