git:小项目工作

时间:2010-12-09 02:23:37

标签: git

我目前正在尝试关注Pro Git书中提到的基于小项目的工作组:http://progit.org/book/ch5-2.html

所以,这是我的设置:

[Live Website Folder] 
|             |
|             |
Developer1    Developer2

我实现这一目标的方式是我做了以下事情:

  1. git init --shared = 0777
  2. git clone / live / website developer1
  3. git clone / live / website developer2
  4. 我能够成功克隆我的项目,然后进入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所做的更改。这是预期的行为吗?

3 个答案:

答案 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