我目前正在尝试关注Pro Git书中提到的基于小项目的工作组:http://progit.org/book/ch5-2.html
所以,这是我的设置:
[Live Website Folder]
| |
| |
Developer1 Developer2
我实现这一目标的方式是我做了以下事情:
我能够成功克隆我的项目,然后进入developer1
文件夹。在这里,我对文件index.html
进行了更改。有一次,我做了这些改变,我做了:
git add index.html
git commit -m 'Modified index.html --developer1'
git push
现在,当我转到/live/website
目录并执行git status
时,它正确地告诉我文件index.html
已被修改。当我这样做时:
git add index.html
git commit -m 'Modified index.html by developer1'
它成功进行了提交,但是当我尝试vi index.html
时,我看到的文件是原始/未修改的文件。我没有在该文件中看到developer1所做的更改。这是预期的行为吗?
答案 0 :(得分:2)
看起来你正在推进一个非裸存储库。这是not recommended并且可以产生意想不到的效果来诱捕粗心的人。相反,您可能希望创建一个新的裸存储库作为主存储库。
mkdir /git/project.git
cd /git/project.git
git init --bare --shared
cd /live/website
git remote add origin /git/project.git
git push origin master
然后,developer1和developer2应该从/git/project.git
克隆,并推送到那里。当您想要更新您的实时网站时:
cd /live/website
git pull
答案 1 :(得分:2)
git status
告诉您的是index.html
与git索引中的内容不同。
推送后,您的/live/website
个回购包含索引中已更新的index.html
,但工作副本中包含旧版index.html
。您需要在git reset --hard HEAD
内执行git checkout -f
后跟/live/website
,将工作副本重置为与HEAD提交相同。
我建议你稍微修改你的设置。添加一个裸露的staging
存储库并将更改推送到该存储库中。添加在git pull staging master
内运行/live/website
的更新后挂钩。这将确保在提交提交后立即更新实时网站。
光荣的ascii艺术:
/live/website
|
|
/path/to/staging (bare)
| |
| |
dev1 dev2
编辑:更新以更正用于修复工作副本的命令序列。
答案 2 :(得分:0)
当您推送到另一个目录时,它不会更新该远程目录的结帐。
你必须这样做(在现场/网站上):
git reset --hard
从开发者处获取新的更新。
这是因为您的树当前指向前一个提交树。但在进行'git status'时,它会从您所在的分支中获取最新的更改。
摆脱这种情况的一种方法是在post-receive
上设置一个git-hook