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