2012-04-02 20 views
2

我们正在开发产品,我们使用Git作为SCM。该产品的每个小版本都位于其单独的分支中。作为一名开发人员,我有自己的一套数据库,每个小版本都有一套数据库。我也有一个专用的配置文件,它被Git忽略,它指定要使用哪个数据库。但是,因为它被Git忽略,所以无论我现在在哪个分支上都保持不变。这是不好的,因为如果配置文件说要使用数据库db_1_2(它用于分支1.2),切换到分支1.3将使配置文件仍然指向数据库db_1_2。我可以在不同的git分支中使用不同的私人配置文件吗?

我目前有一段代码可以读取并解析分支标识符,以设置正确的数据库,但它很容易出错,因为Git标识符有很多种类,其中大部分都很难/不可能从中解析正确的分支名称。

我可以问产品本身,但并非所有的旧版本都有一个静态的getVersion()方法。

所以我的问题是这样的:有没有什么好的,干净的方式来让私人配置文件属于某个分支,但是当推送到远程/中央回购站时,不会让它成为最终产品?

+0

问得好副作用。我的做法是解析'git branch'的输出,但这可能就是你现在正在做的。 – bitmask 2012-04-02 20:26:04

+0

是的,那就是我现在正在做的。当“git name-rev -name-only HEAD”产生类似“1.2”的东西时效果很好,但是当检查某个提交或者等分时,这一切都会消失。 – 2012-04-02 20:48:33

+0

你有没有考虑过使用子模块? – Nic 2012-04-02 20:57:06

回答

0

你如何创建一系列以你的git分支命名的配置文件?然后,你可以做这样的事情,当你偶然分支:

ln -s configs/$(git symbolic-ref HEAD|cut -f3 -d/) myconfig.conf 

或者,而不是运行:

git co -b branchname 

做一个switchbranch脚本确实是这样的:

git co -b $1 
ln -s configs/$1 myconfig.conf 

而这一切都变成自动的。如果您切换到没有现有配置的分支,您甚至可以看中并创建模板配置文件。

+0

看起来有趣,但它会处理平分,例如? – 2012-04-02 20:45:15

+0

可能不是......或者更确切地说,并非没有帮助。如果你使用'git bisect run ...'来处理事情,那么你可能是脚本中必要的逻辑。我不熟悉'git bisect'如何在多个分支的环境中运行,所以我只是在这里猜测。 – larsks 2012-04-02 20:50:56

2

当数据库与分支如此整合相关时,为什么数据库版本在被忽略的配置文件中?您正在寻求一种方法来确定分支中的数据库,但分支的整个工作是提供特定于分支的代码状态并与分支中的其他所有内容保持一致。将数据库标识符从配置文件移出到不被忽略的地方。

+0

这已经完成,但不在旧版本的产品中。所以,当我需要检查一个较旧的版本以查看客户所做的所有事情时,代码库并没有提供任何有关它的版本的提示。 – 2012-04-02 21:12:37

+0

如果它是旧的代码,并且你的代码库不清楚什么是什么,那么你需要解决这个问题!也许从标记东西开始,以便您拥有一致的配置 - 无论是git托管的源代码或数据库还是其他任何东西。 – GoZoner 2012-04-03 03:28:37

-1

您可以改变(自动)配置,反映分支更改,如果它将版本化为模板,并且使用this my post的想法,您可以将关键字添加到模板的分支依赖部分,并用于处理这些部分关键字。分公司对任何变更可能

git branch | grep "*"

git status | grep 'On branch'

git symbolic-ref -q HEAD(?)

git branch | sed --quiet 's/* \(.*\)/\1/p'

无法看到如何避免推

相关问题