目前,我正在尝试遵循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在该文件中所做的更改。这是预期的行为吗?
发布于 2010-12-09 02:30:07
git status告诉您的是,index.html不同于git索引中的内容。
推送后,/live/website回购在索引中包含更新的index.html,而在工作副本中包含旧的index.html。您需要执行git reset --hard HEAD,然后在/live/website中执行git checkout -f,以将工作副本重置为与头提交相同的副本。
我建议你稍微修改一下你的设置。添加一个空的staging存储库,并将更改推送到其中。添加一个在git pull staging master中运行/live/website的更新后挂钩。这将确保在提交时立即更新实时网站。
在辉煌的艺术中:
/live/website
|
|
/path/to/staging (bare)
| |
| |
dev1 dev2编辑:更新以更正用于修复工作副本的命令序列。
发布于 2010-12-09 02:27:26
看起来,您正在进入一个非空的存储库。这是不建议,可能会产生意想不到的效果来诱捕粗心大意的人。相反,您可能希望创建一个新的裸存储库作为主存储库。
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发布于 2010-12-09 02:26:23
当您推入另一个目录时,它不会更新该远程目录的签出。
你必须做(在现场/网站上):
git reset --hard从开发人员那里获得新的更新。
这是因为您的树当前指向以前的提交树。但是,当执行“git状态”时,它会从您所处的分支中获取最近的更改。
摆脱这一困境的一种方法是在邮件收件上设置一个git-钩子。
https://stackoverflow.com/questions/4394300
复制相似问题