如何用Git同时维护公开和私有2个版本?

2011-11-17 21:13:41 +08:00
 keakon
简单来说就是一个开源项目,服务器上有个公开的仓库,本地有个私有的仓库。

我在本地开发时需要修改一些配置信息,例如用户名密码之类的。
开发完成后,我需要把改动push到公开的仓库,但是我个人的配置信息不能被push过去,历史记录里也不能有。
每次从服务器checkout时,也不需要我重新修改那些配置信息,直接和本地的合并就行了。
还有些时候可能需要增加一些配置信息的字段,这时候我希望公开的仓库中也能增加这些字段,只是里面的值为默认的。

我总觉得这种需求是再常见不过的了,可无奈找不到简单有效的解决办法,不知大家有何高见?
6117 次点击
所在节点    git
11 条回复
Los
2011-11-17 21:18:10 +08:00
将配置信息单独保存在一个独立文件
然后在项目目录下添加一个命名为 .gitignore 的文件
输入内容以一般rails项目为例如下

.bundle
db/*.sqlite3
log/*.log
tmp/
.sass-cache/
config/database.yml
coverage/*
Los
2011-11-17 21:20:58 +08:00
如果你的配置文件放在 config/database.yml 里,
那么直接在 .gitignore 的文件里输入 config/database.yml 就行了,更多需要忽略的文件或目录分行输入就行了
chloerei
2011-11-17 21:25:03 +08:00
config/database.example.yml <- 入库
config/database.yml <- 实际使用(加入.gitignore)

这样
keakon
2011-11-17 21:27:21 +08:00
@Los 服务器上的更新了,或者我要上传一个新版本怎么办?临时取消.gitignore,并把自己的备份到其他地方么?
keakon
2011-11-17 21:29:42 +08:00
@chloerei 囧,难怪看到很多这样配置的开源项目
Los
2011-11-17 21:35:27 +08:00
@keakon 不是很明白你说的上传一个新版本的意思,你说的是要部署新版本到服务器上?如果是这样的话一般是将配置文件之类的独立放在服务器的另一个文件目录,然后通过 Symlinks 链接到项目内,比如rails里经常这样
ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml
Los
2011-11-17 21:38:49 +08:00
@keakon 不知道你有没有习惯使用自动部署工具,比如 capistrano 之类的,配置好后,基本跟GAE中使用GoogleAppEngineLauncher更新项目新版本一样简单,直接一个命令 cap deploy 就完全自动部署好
keakon
2011-11-17 21:38:54 +08:00
@Los 这个服务器指的是公开仓库。目前就按 @chloerei 说的,弄2套配置文件就行了。
Los
2011-11-17 21:41:12 +08:00
@keakon 明白你说的意思了,哈,后面我说的都是多余的。
ayanamist
2011-11-17 22:54:03 +08:00
@keakon 刚想了一下,部署的时候用部署工具,在部署时生成私有的配置文件并使用,推送到开源仓库的时候用个sample文件。
dreampuf
2011-11-18 03:55:52 +08:00
Makefile

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/21640

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX