V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
keakon
V2EX  ›  git

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

  •  
  •   keakon · 2011-11-17 21:13:41 +08:00 · 6142 次点击
    这是一个创建于 4773 天前的主题,其中的信息可能已经有所发展或是发生改变。
    简单来说就是一个开源项目,服务器上有个公开的仓库,本地有个私有的仓库。

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

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

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

    这样
    keakon
        4
    keakon  
    OP
       2011-11-17 21:27:21 +08:00
    @Los 服务器上的更新了,或者我要上传一个新版本怎么办?临时取消.gitignore,并把自己的备份到其他地方么?
    keakon
        5
    keakon  
    OP
       2011-11-17 21:29:42 +08:00
    @chloerei 囧,难怪看到很多这样配置的开源项目
    Los
        6
    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
        7
    Los  
       2011-11-17 21:38:49 +08:00
    @keakon 不知道你有没有习惯使用自动部署工具,比如 capistrano 之类的,配置好后,基本跟GAE中使用GoogleAppEngineLauncher更新项目新版本一样简单,直接一个命令 cap deploy 就完全自动部署好
    keakon
        8
    keakon  
    OP
       2011-11-17 21:38:54 +08:00
    @Los 这个服务器指的是公开仓库。目前就按 @chloerei 说的,弄2套配置文件就行了。
    Los
        9
    Los  
       2011-11-17 21:41:12 +08:00
    @keakon 明白你说的意思了,哈,后面我说的都是多余的。
    ayanamist
        10
    ayanamist  
       2011-11-17 22:54:03 +08:00
    @keakon 刚想了一下,部署的时候用部署工具,在部署时生成私有的配置文件并使用,推送到开源仓库的时候用个sample文件。
    dreampuf
        11
    dreampuf  
       2011-11-18 03:55:52 +08:00
    Makefile
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1119 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:34 · PVG 07:34 · LAX 15:34 · JFK 18:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.