Правильно ли использовать git (для кода сайта частного репо)? - PullRequest
6 голосов
/ 28 августа 2009

Это может быть вопрос о соглашении, лучших практиках и / или личных предпочтениях:

Так что я git noob, и код моего сайта не стоит делиться, поэтому я не использую github или тому подобное.

Зная, что git не нужен центральный репозиторий, я подумал: отлично, моя рабочая станция и сервер - это два узла, и я просто перенесу изменения с моей рабочей станции на сервер.

Когда я начинал, код был только на сервере, поэтому я:

  1. На сервере: git init
  2. На рабочей станции: git clone me@myserver:path/to/repo
  3. Весело вносил изменения и совершал локально
  4. На рабочей станции: git push me@myserver:path/to/repo

Я получил странные результаты. Файлы, которые я добавил локально, появились на сервере, но изменения в существующих файлах не были отражены.

Затем я прочитал предупреждение против отправки в удаленную ветку, которая была проверена. Итак, новая настройка:

  1. Побежал git clone --bare, чтобы создать голое хранилище
  2. Поместить пустой репозиторий на мой сервер (~/repos/mysite.git - не общая папка)
  3. Код местный и: git push me@myserver:repos/mysite.git
  4. На сервере: git pull ~/repos/mysite.git, чтобы получить самую последнюю версию

Это правильно ? Это логично? Это то, что вы будете делать?

Ответы [ 3 ]

4 голосов
/ 28 августа 2009

Независимо от того, что вы решите сделать, вы можете немного автоматизировать его, используя git hooks . Хуки - это набор скриптов, которые git будет выполнять при определенных событиях. Соответствующим здесь является хук после обновления (в репозитории сервера). В обычном репо хуки находятся в .git/hooks, поэтому в голом репо они находятся в hooks. Этот каталог, вероятно, в настоящее время содержит множество примеров скриптов хуков (в последних версиях они называются *.sample). Вам нужно будет создать файл с именем post-update, содержащий все действия, которые вы хотите предпринять после отправки сервера (например, перейдите на другой репозиторий и выполните извлечение).

Что касается специфики вашего решения ... вы делаете правильные вещи, не нажимая на отмеченную ветку. Единственная возможная проблема с тем, что вы делаете, заключается в том, что сервер заканчивается дополнительной копией хранилища, используемой только для извлечения файлов. Если вы решите, что вам не нравится эта трата дискового пространства, я почти уверен, что это сделает то, что вы хотите:

git --work-tree=/path/to/checkout-dir --bare reset --hard

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

Примечание: если вы решите, что все равно хотите сделать push-уведомление в извлеченную ветку (только если репо на сервере никогда не будет использовано ни для чего, кроме отправки и извлечения копии файлов) ... если вы абсолютно уверены в этом, вы можете установить для receive.denyCurrentBranch значение false в gitconfig сервера, выполнить git reset --hard на сервере, принудительно переведя его рабочий каталог в состояние, в котором он должен быть.

4 голосов
/ 28 августа 2009

Ваша новая настройка - это правильный способ настройки репозитория сервера.

Подробнее см. Главу Getting Git на сервере в книге Pro Git .

2 голосов
/ 28 августа 2009

Читать "Почему я не вижу изменений в удаленном репо после" git push "?" в GitFaq (в Git Wiki).

...