git: небольшая проектная работа - PullRequest
2 голосов
/ 09 декабря 2010

В настоящее время я пытаюсь следовать небольшой рабочей группе на основе проектов, упомянутой в книге Pro Git: http://progit.org/book/ch5-2.html

Итак, вот моя установка:

[Live Website Folder] 
|             |
|             |
Developer1    Developer2

Способ, которым я достиг этого, заключался в следующем:

  1. git init --shared = 0777
  2. git clone / live / сайт developer1
  3. git clone / live / website 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 в этот файл. Это ожидаемое поведение?

Ответы [ 3 ]

2 голосов
/ 09 декабря 2010

Похоже, вы продвигаетесь в не-голое хранилище. Это не рекомендуется и может привести к неожиданным эффектам, чтобы заманить неосторожных. Вместо этого вы можете создать новый пустой репозиторий, который будет служить основным репозиторием.

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
2 голосов
/ 09 декабря 2010

Что git status говорит вам о том, что index.html отличается от того, что есть в git index.

После нажатия в вашем репо /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

РЕДАКТИРОВАТЬ: Обновлено, чтобы исправить последовательность команд для исправления рабочей копии.

0 голосов
/ 09 декабря 2010

Когда вы нажимаете на другой каталог, он не обновляет извлечение этого удаленного каталога.

Вы должны сделать (в режиме реального времени / на сайте):

git reset --hard

, чтобы получать новые обновления от разработчиков.

Это происходит потому, что ваше дерево в данный момент указывает на предыдущее дерево коммитов. но когда вы делаете 'git status', он выбирает самые последние изменения из вашей ветки.

Один из способов выйти из этого - установить git-hook на post-receive

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...