问一个git的问题嘛~ - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
tunetoystory

问一个git的问题嘛~

  •  
  •   tunetoystory 2012 年 8 月 18 日 5211 次点击
    这是一个创建于 4998 天前的主题,其中的信息可能已经有所发展或是发生改变。
    是这样得,我的项目要往服务器上部署嘛,但是服务器的配置文件是要修改的,然后修改之后下次使用 git pull 的时候提示我有未提交的修改不要我更新

    可不可以像SVN那样嘛,update顶多会产生冲突
    27 条回复    1970-01-01 08:00:00 +08:00
    marvinlix
        1
    marvinlix  
       2012 年 8 月 18 日
    先git stash把本地为提交的缓存起来,git pull之后再去出来
    tunetoystory
        2
    tunetoystory  
    OP
       2012 年 8 月 18 日
    @marvinlix 谢谢,我试下看看
    tunetoystory
        3
    tunetoystory  
    OP
       2012 年 8 月 18 日
    @marvinlix 喔,这个果断行!谢谢
    9hills
        4
    9hills  
       2012 年 8 月 18 日   1
    这种stash然后再apply的方式是可行的,但还不够自动

    你最好的方法就是在服务器上checkout -b一个deploy分支。master分支所有机器上都要一致,就是你的代码主分支。然后在deploy分支你就可以commit服务器上对配置文件的修改。以后master分支有更新的时候,你只需要在deploy分支merge一下master分支就可以了,这样你服务器上的配置也会被git管理起来,很方便。

    而且deploy分支只是服务器上的本地分支,没有push出去,不存在泄露你服务器上配置(比如密码,token等)的风险。

    再延伸,你甚至可以写一个钩子,让这些工作自动化,这样你只要在开发环境push一下,就能自动部署了
    imcotton
        5
    imcotton  
       2012 年 8 月 18 日
    git update-index --assume-unchanged
    kingwkb
        6
    kingwkb  
       2012 年 8 月 18 日
    @9hills deploy没有push出去的话,那么在本地可以把代码merge到deploy分支吗,我没怎么用过git,一直svn,现在大家都用git做为部署工具了吗?这样有不好的地方吗? 好的话就切换到git去
    tunetoystory
        7
    tunetoystory  
    OP
       2012 年 8 月 18 日
    @9hills 谢谢,哪天试看看!
    9hills
        8
    9hills  
       2012 年 8 月 18 日
    @kingwkb 可以。git作为部署工具的好处是可以写钩子,全自动化。只要你本地push一下master,服务器那边就自动部署了,不用你再ssh到服务器,cp代码,reload/restart服务


    @Rabbit52 这种方法当你在master中对配置文件进行升级后,merge时有可能会冲突。但这个是必须手动处理的。。。随便什么工具,代码冲突必须得手动处理的。。。你可以在钩子函数中加上相关判断,如果需要手动处理则邮件你之类的
    tunetoystory
        9
    tunetoystory  
    OP
       2012 年 8 月 18 日
    @9hills 嗯,懂了。谢谢你哦,写了这么多
    aleung
        10
    aleung  
       2012 年 8 月 18 日
    配置数据不应该跟源代码放在一起吧,放个配置文件模板,另外用脚本去更新配置文件
    agassi_yzh
        11
    agassi_yzh  
       2012 年 8 月 19 日
    不知道你用什么语言写的哦。我用php根据apache的ServerAdmin来判断环境。

    如果开发用dev,服务器上生产环境用production。在php代码中判断就好了。不需要在服务器上操作啊。
    clino
        12
    clino  
       2012 年 8 月 19 日   1
    也可以在本地先提交,然后 git pull --rebase
    supersheep
        13
    supersheep  
       2012 年 8 月 26 日
    有些点看得不是太明白。
    按照自己的理解,是不是说我在客户端 push 了之后
    在服务器端
    checkout master ,pull , checkout deploy, merge master呢?
    但是这样checkout master的时候服务器上配置会不正确
    是哪个地方理解错误了,请大家更正。
    NemoAlex
        14
    NemoAlex  
       2012 年 8 月 26 日   2
    @supersheep 服务器不要老在分支之间 checkout 啊,业务还在进行的同时,这改来改去吃得消么
    可以在 deploy 分支执行“git fetch --all”把所有的分支都更新下来,然后“git merge master”

    不过最好的办法,也是我建议诸位做的:把配置集中在一个或者少量的配置文件里,在版本控制系统中维护一份配置文件的模板,ignore 掉真正的配置文件
    在配置文件内容有修改的时候,手动维护服务器上的配置文件与模板保持一致
    clino
        15
    clino  
       2012 年 8 月 26 日
    建议多用rebase少用merge,其实svn的方式相当于rebase做完以后一条线,git merge做多了版本图太复杂
    supersheep
        16
    supersheep  
       2012 年 8 月 26 日
    @NemoAlex 嗯,还没正式开业所以敢这么干。这个思路大概理解了,多谢,之前也是觉得应该把配置放在ignore中,怕就怕一多自己忘了。配置文件的模版可否理解为开发环境中的配置?不然每次改动手动维护模版也会比较吃力吧。
    tunetoystory
        17
    tunetoystory  
    OP
       2012 年 8 月 26 日
    @NemoAlex 这个方法挺好诶,版本库里面只有配置文件的模板,然后在不同环境重命名出来,直接将它忽略掉!
    dn
        18
    dn  
       2012 年 8 月 26 日
    为安全计最好不要用git来更新生产环境配置文件

    我这边的解决方案是,check in的文件名是:config.default.js ,然后使用的文件是config.js
    并且需要把config.js放弃.gitignore 文件中。

    这样git pull的时候不会有merge问题。

    代码更新之后,diff配置之后,手动更新配置文件。

    然后重启项目,运行
    tunetoystory
        19
    tunetoystory  
    OP
       2012 年 8 月 26 日
    @dn 还有 .gitignore 这个,我才学到,跪谢!!!!
    hpyhacking
        20
    hpyhacking  
       2012 年 8 月 26 日
    @Rabbit52 .gitignore不能解决你的问题,这个文件一样要放在库中共享,你单独对服务器上的版本进行修改一样会收到更新提示。整个的问题属于部署范畴,好的解决方法是不要去理会什么开发环境中的配置文件,生产环境通过部署覆盖一份私有的配置文件即可。
    tunetoystory
        21
    tunetoystory  
    OP
       2012 年 8 月 26 日
    @hpyhacking 能啊!我已经解决了,而且完美,嘿嘿
    http://rabbit52.com/2012/devel/deploy-with-git
    supersheep
        22
    supersheep  
       2012 年 8 月 26 日
    @NemoAlex
    试用了你的方法,按理应该正确,但是却出现了如下结果
    git fetch --all

    remote: Counting objects: 74, done.
    remote: Compressing objects: 100% (47/47), done.
    remote: Total 47 (delta 36), reused 0 (delta 0)
    Unpacking objects: 100% (47/47), done.

    from /home/git/fdz
    af16fbe..0e2cbde master -> origin/master

    git merge master
    Already up-to-date.
    没有出现预期中显示合并信息的情况,pull时才被merge。pull难道不是fetch+merge么?

    git pull origin master

    * branch master -> FETCH_HEAD
    Merge made by the 'recursive' strategy.
    application/config/form_validation.php | 4 ++--
    application/controllers/meal.php | 2 +-
    application/views/frag/footer.php | 14 +++++++-------
    application/views/frag/header.php | 12 ++++++------
    ...
    berryphone
        23
    berryphone  
       2012 年 8 月 26 日
    兔子哥,我是来打酱油的~
    NemoAlex
        24
    NemoAlex  
       2012 年 8 月 26 日
    @supersheep Sorry,应该是“git merge origin master”才对,少写了个 origin
    或者你可以不执行 fetch 操作,直接“git pull origin master”
    tunetoystory
        25
    tunetoystory  
    OP
       2012 年 8 月 26 日
    @berryphone 你叫我哥,不埋汰我嘛。疯子哥
    tunetoystory
        26
    tunetoystory  
    OP
       2012 年 8 月 28 日
    @supersheep 应该是git merge origin/master
    yaotian
        27
    yaotian  
       2012 年 8 月 28 日
    看我总结的文章,应该对你有帮助 https://github.com/yaotian/doc/blob/master/git.md
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2705 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 65ms UTC 06:18 PVG 14:18 LAX 23:18 JFK 02:18
    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