
1 marvinlix 2012 年 8 月 18 日 先git stash把本地为提交的缓存起来,git pull之后再去出来 |
2 tunetoystory OP @marvinlix 谢谢,我试下看看 |
3 tunetoystory OP @marvinlix 喔,这个果断行!谢谢 |
4 9hills 2012 年 8 月 18 日 这种stash然后再apply的方式是可行的,但还不够自动 你最好的方法就是在服务器上checkout -b一个deploy分支。master分支所有机器上都要一致,就是你的代码主分支。然后在deploy分支你就可以commit服务器上对配置文件的修改。以后master分支有更新的时候,你只需要在deploy分支merge一下master分支就可以了,这样你服务器上的配置也会被git管理起来,很方便。 而且deploy分支只是服务器上的本地分支,没有push出去,不存在泄露你服务器上配置(比如密码,token等)的风险。 再延伸,你甚至可以写一个钩子,让这些工作自动化,这样你只要在开发环境push一下,就能自动部署了 |
5 imcotton 2012 年 8 月 18 日 git update-index --assume-unchanged |
6 kingwkb 2012 年 8 月 18 日 @9hills deploy没有push出去的话,那么在本地可以把代码merge到deploy分支吗,我没怎么用过git,一直svn,现在大家都用git做为部署工具了吗?这样有不好的地方吗? 好的话就切换到git去 |
7 tunetoystory OP @9hills 谢谢,哪天试看看! |
8 9hills 2012 年 8 月 18 日 |
9 tunetoystory OP @9hills 嗯,懂了。谢谢你哦,写了这么多 |
10 aleung 2012 年 8 月 18 日 配置数据不应该跟源代码放在一起吧,放个配置文件模板,另外用脚本去更新配置文件 |
11 agassi_yzh 2012 年 8 月 19 日 不知道你用什么语言写的哦。我用php根据apache的ServerAdmin来判断环境。 如果开发用dev,服务器上生产环境用production。在php代码中判断就好了。不需要在服务器上操作啊。 |
12 clino 2012 年 8 月 19 日 也可以在本地先提交,然后 git pull --rebase |
13 supersheep 2012 年 8 月 26 日 有些点看得不是太明白。 按照自己的理解,是不是说我在客户端 push 了之后 在服务器端 checkout master ,pull , checkout deploy, merge master呢? 但是这样checkout master的时候服务器上配置会不正确 是哪个地方理解错误了,请大家更正。 |
14 NemoAlex 2012 年 8 月 26 日 @supersheep 服务器不要老在分支之间 checkout 啊,业务还在进行的同时,这改来改去吃得消么 可以在 deploy 分支执行“git fetch --all”把所有的分支都更新下来,然后“git merge master” 不过最好的办法,也是我建议诸位做的:把配置集中在一个或者少量的配置文件里,在版本控制系统中维护一份配置文件的模板,ignore 掉真正的配置文件 在配置文件内容有修改的时候,手动维护服务器上的配置文件与模板保持一致 |
15 clino 2012 年 8 月 26 日 建议多用rebase少用merge,其实svn的方式相当于rebase做完以后一条线,git merge做多了版本图太复杂 |
16 supersheep 2012 年 8 月 26 日 @NemoAlex 嗯,还没正式开业所以敢这么干。这个思路大概理解了,多谢,之前也是觉得应该把配置放在ignore中,怕就怕一多自己忘了。配置文件的模版可否理解为开发环境中的配置?不然每次改动手动维护模版也会比较吃力吧。 |
17 tunetoystory OP @NemoAlex 这个方法挺好诶,版本库里面只有配置文件的模板,然后在不同环境重命名出来,直接将它忽略掉! |
18 dn 2012 年 8 月 26 日 为安全计最好不要用git来更新生产环境配置文件 我这边的解决方案是,check in的文件名是:config.default.js ,然后使用的文件是config.js 并且需要把config.js放弃.gitignore 文件中。 这样git pull的时候不会有merge问题。 代码更新之后,diff配置之后,手动更新配置文件。 然后重启项目,运行 |
19 tunetoystory OP @dn 还有 .gitignore 这个,我才学到,跪谢!!!! |
20 hpyhacking 2012 年 8 月 26 日 @Rabbit52 .gitignore不能解决你的问题,这个文件一样要放在库中共享,你单独对服务器上的版本进行修改一样会收到更新提示。整个的问题属于部署范畴,好的解决方法是不要去理会什么开发环境中的配置文件,生产环境通过部署覆盖一份私有的配置文件即可。 |
21 tunetoystory OP |
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 ++++++------ ... |
23 berryphone 2012 年 8 月 26 日 兔子哥,我是来打酱油的~ |
24 NemoAlex 2012 年 8 月 26 日 @supersheep Sorry,应该是“git merge origin master”才对,少写了个 origin 或者你可以不执行 fetch 操作,直接“git pull origin master” |
25 tunetoystory OP @berryphone 你叫我哥,不埋汰我嘛。疯子哥 |
26 tunetoystory OP @supersheep 应该是git merge origin/master |
27 yaotian 2012 年 8 月 28 日 看我总结的文章,应该对你有帮助 https://github.com/yaotian/doc/blob/master/git.md |