Использование git в качестве центрального репозитория

Я создал Git для моего собственного использования, так что я могу открыть проект Из "где-нибудь", и сохранить версию, если я, случается, работают на часть X сюда, и часть Г, и могу слить если надо.

однако, только одна из моих машин имеет статический IP. Мой мозг застрял в режиме CVS, поэтому я попытался настроить git, чтобы эта машина была "центральным" сервером, с которого все остальные тянут.

такого рода работ. У меня есть куча машин A-C, которые делают git-pull от "master" м. Они делают git толкает, чтобы отправить данные обратно.

проблема возникает, если я делаю разработку на мастере. Во-первых, я не могу понять, как заставить центральный репозиторий предоставить последнюю версию без выполнения

git reset --hard HEAD

что кажется немного чрезмерным. И если я делаю разработку на центральной машине перед сбросом, я не уверен, как объединить ее с изменениями, которые уже были выдвинуты.

что-то не так с моей ментальной моделью. Помочь?

11
задан Alex Feinman
26.04.2023 4:39 Количество просмотров материала 3123
Распечатать страницу

4 ответа

вы хотите, чтобы ваш центральный репозиторий был голым. Скажи, что машина, на которой он живет, называется static:

$ ssh static git init --bare /git/myproject.git

этот голый репозиторий является центральной точкой встречи: он предназначен для толкания и вытаскивания, а не для разработки.

делаем вашу разработку на клонах центрального репозитория:

$ cd ~/src
$ git clone static:/git/myproject.git

даже если вы на static работа в клон:

$ git clone /git/myproject.git

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

например:

$ git checkout -b fix-bug-in-foo
$ hack
$ git add file.c file.h
$ git commit -m "Fix ..."

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

может быть, вы идете домой той ночью и добавил новую функцию. На следующее утро, ты

$ git checkout master
$ git pull

чтобы обновить локальный мастер, чтобы отразить то, что в Центральном репозитории.

но теперь скажите, что вы исправили ошибку foo и готовы включить ее в ветку master. Сначала вы хотите интегрировать его с изменениями прошлой ночи:

$ git checkout fix-bug-in-foo
$ git rebase master

rebase команда заставляет ваш репозиторий выглядеть так, как будто вы исправили ошибку foo поверх новой функции прошлой ночи. (Это вроде как svn update, но гибкий и мощный.)

теперь, чтобы получить его в свой центральный магистр:

$ git checkout master
$ git merge fix-bug-in-foo
$ git push origin master

мы относимся к мастеру как к особенному, но это только условно. Вы можете поделиться работой по различным отраслям различные репозитории через репозиторий git на static так же легко.

26
отвечен Greg Bacon 2023-04-27 12:27

If у вас есть центральный сервер с центральным репозиторием git, этот репозиторий должен быть bare репозитория. В голых репозиториях нет рабочих копий файлов. Следовательно, если вы работаете на этой центральной машине, вы работаете не с центральным репозиторием напрямую, а с локальным клоном.

6
отвечен innaM 2023-04-27 14:44

этот ответ похож на gbacon это ответ, но используется подход, при котором у вас уже есть локальная настройка репозитория, и вы хотите создать удаленный мастер, который рассматривается как центральный репозиторий. Это просто добавление деталей из другого подхода.

Я использую git для хранения файлов dot-config. Я отталкиваюсь от того, что я считаю "центральным РЕПО". Это довольно удобно, чтобы сбросить все мои файлы dot через несколько компьютеров.

$ ssh example.com
$ mkdir dotconf.git && cd dotconf.git
$ git init --bare
$ exit

это создало пустой голые РЕПО на сайте РЕПО.

теперь, если у меня уже есть существующий репозиторий локально, я могу отправить его на удаленный сайт.

$ cd ~/src/dotconf

chdir в локальный каталог.

$ git remote add origin ssh://example.com/~/dotconf.git

добавьте удаленный репозиторий в качестве источника, поэтому push / pull будет действовать на этот репозиторий.

$ git push origin master

нажмите мой мастер к источнику (как ранее помечены с помощью пульта дистанционного управления git). Теперь это удаленное РЕПО рассматривается как мое "центральное РЕПО". Все мои git push / pull будет взаимодействовать с происхождение.

если я иду на другой хост, я могу легко вытащить через клон, что РЕПО на новое место.

$ git clone ssh://example.com/~/dotconf.git

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

$ cd ~/src
$ git clone ~/dotconf.git
$ cd ~/src/dotconf
  * do coding *
$ git push
  * check in from another location *
$ git pull

вы, вероятно, придется установить git config --add branch.master.remote origin так git pull не жалуется, что вы недостаточно конкретны. Другой альтернативой является установка ветви master в --track удаленный происхождения. Полезно, если у вас есть несколько филиал.

5
отвечен Darren Hall 2023-04-27 17:01

Я как раз исследовал эту же проблему сегодня. Этот блог post имеет много дискуссий по этому вопросу, но мнение большинства заключается в том, чтобы делать то, что сказал Манни. Посмотрите на комментарий к сообщению Дэвида френча для некоторых других возможностей, в том числе, что делать, если вы в конечном итоге ошибочно нажимаете на репозиторий, в котором есть незафиксированная работа в индексе или рабочем дереве. "git reset-soft HEAD^" вернет заданное изменение, не нарушая вашу работу.

1
отвечен Greg Graham 2023-04-27 19:18

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх