如何用Git同时维护公开和私有2个版本? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
keakon
V2EX    git

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

  •  
  •   keakon 2011 年 11 月 17 日 6596 次点击
    这是一个创建于 5183 天前的主题,其中的信息可能已经有所发展或是发生改变。
    简单来说就是一个开源项目,服务器上有个公开的仓库,本地有个私有的仓库。

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

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

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

    这样
    keakon
        4
    keakon  
    OP
       2011 年 11 月 17 日
    @Los 服务器上的更新了,或者我要上传一个新版本怎么办?临时取消.gitignore,并把自己的备份到其他地方么?
    keakon
        5
    keakon  
    OP
       2011 年 11 月 17 日
    @chloerei ,难怪看到很多这样配置的开源项目
    Los
        6
    Los   2011 年 11 月 17 日
    @keakon 不是很明白你说的上传一个新版本的意思,你说的是要部署新版本到服务器上?如果是这样的话一般是将配置文件之类的独立放在服务器的另一个文件目录,然后通过 Symlinks 链接到项目内,比如rails里经常这样
    ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml
    Los
        7
    Los  
       2011 年 11 月 17 日
    @keakon 不知道你有没有习惯使用自动部署工具,比如 capistrano 之类的,配置好后,基本跟GAE中使用GoogleAppEngineLauncher更新项目新版本一样简单,直接一个命令 cap deploy 就完全自动部署好
    keakon
        8
    keakon  
    OP
       2011 年 11 月 17 日
    @Los 这个服务器指的是公开仓库。目前就按 @chloerei 说的,弄2套配置文件就行了。
    Los
        9
    Los  
       2011 年 11 月 17 日
    @keakon 明白你说的意思了,哈,后面我说的都是多余的。
    ayanamist
        10
    ayanamist  
       2011 年 11 月 17 日
    @keakon 刚想了一下,部署的时候用部署工具,在部署时生成私有的配置文件并使用,推送到开源仓库的时候用个sample文件。
    dreampuf
        11
    dreampuf  
       2011 年 11 月 18 日
    Makefile
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5934 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8. 30ms UTC 02:22 PVG 10:22 LAX 18:22 JFK 21:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86