gpt4 book ai didi

git - 个人和 SCCS 项目范围内使用 git

转载 作者:太空狗 更新时间:2023-10-29 13:41:45 26 4
gpt4 key购买 nike

我在一家内部使用 SCCS 开发其主要应用程序的公司工作。我们目前有两个开发流,称为稳定和实验。 Stable 目前正在进行的更改主要是错误修复,并且也可能修复 Experimental 中的问题。实验正在添加一个相当大的新功能。

我遇到的主要问题是开发稳定版的开发人员不会将他们的更改也放在实验版中。当我在进行实验时,我必须 merge 两个分支。

我自己使用 Git 已经大约一年了,它在一个分支(稳定版)上运行得很好,因为我可以:

git checkout master
<copy all Stable files over, which will add changes>
git commit -a -m "Updated files 06/19/2011"
git checkout New_Feature
git rebase master

这会使用稳定版中的更改更新我的所有文件。但是,现在他们正在使用两个开发分支,我遇到了很多 merge 冲突。这源于 SCCS 将元数据放在源文件的顶部,如下所示:

#pragma ident "@(#)file1.c   1.233 06/17/11 Company_Experimental"

注意版本号 (1.233)、日期和公司/分支关键字。每次 checkin 都会更改日期和版本号,并且分支会在稳定版和实验版更新之间更改。我不在乎顶部是什么,因为当我 checkin 文件时,它会丢弃顶部并根据我 checkin 的时间和位置获得新值。

话虽如此,这一行将始终位于顶部。有没有什么方法可以忽略顶线,或者以某种方式使这个工作流更易于管理,这样我就可以将开发流与我自己的工作 merge ,而不会经历很多无意义的 merge 冲突?

注意:我已经发起了改变版本控制系统的运动,但是我们有很多老程序员不打算改变他们的方式。请不要回答,“你的公司应该切换到 X”。相信我,我 100% 支持你。

最佳答案

如果您可以简单地删除 git 存储库中 pragma ident 行的内容(您可能可以这样做,因为 SCCS 会为您添加它们),您可以简单地添加:

* filter=skip-ident

到 .git/info/attributes(或 $GIT_DIR/info/attributes)或 .gitattributes(如果你想用 git 跟踪属性文件本身)并放置类似的东西:

[filter "skip-ident"]        clean = "sed '/\(#pragma ident\).*/s//\1/'"

在 .git/config 中。每当将任何文件(与 .git/info/attributes 的第一列中的模式匹配的文件,在本例中为“*”)添加到 git 时,内容将通过 clean 脚本运行,在本例中只是删除所有身份信息。

关于git - 个人和 SCCS 项目范围内使用 git,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6406471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com