Я настроил git для своего собственного использования - так что я могу получить доступ к проекту из «где угодно» и сохранить безопасность версий, если мне довелось работать над частью X здесь и частью Y здесь, и я могу объединиться при необходимости.
Однако только одна из моих машин для разработки имеет статический IP-адрес. Мой мозг застрял в режиме CVS, поэтому я попытался настроить git, чтобы эта машина была «центральным» сервером, с которого все остальные тянут.
Такого рода работы. У меня есть куча машин переменного тока, которые делают git-pull от «master» M. Они делают git push для отправки данных обратно.
Проблема возникает, если я делаю разработку на мастере. Во-первых, я не могу понять, как заставить центральный репозиторий предоставлять последнюю версию, не делая
git reset --hard HEAD
что кажется немного чрезмерным. И если я выполняю разработку на центральном компьютере до перезагрузки, я не уверен, как объединить его с изменениями, которые уже были переданы.
Что-то в моей ментальной модели далеко. Помогите?
Ответы:
Вы хотите, чтобы ваш центральный репозиторий был пустым. Скажем, машина, на которой она живет, называется
static
:Этот голый репозиторий является центральным пунктом встречи: он предназначен для продвижения, а не для развития.
Делайте ваши разработки на клонах центрального хранилища:
Даже если вы
static
работаете в клоне:Хотя вы единственный работаете с этим хранилищем, привыкните выполнять свою работу над тем, что в документации git называется ветками тем . Непосредственным преимуществом этого является то, что он сохраняет чистый мастер , то есть вы всегда можете вытянуть из своей центральной главной ветки в мастер текущего локального репозитория без слияния.
Например:
Это может показаться не таким уж большим делом, но дает вам свободу оставить проект, представленный на этой ветке, в частично приготовленном состоянии, или, если ваша крутая идея окажется провалом, вы можете легко выбросить эту ветку без нарушая все остальное в вашем проекте, которое уже работает в других ветках. Бесконечные бесплатные муллиганы!
Может быть, вы идете домой в ту ночь и добавили новую функцию. На следующее утро ты
обновить ваш локальный мастер, чтобы отразить, что находится в центральном хранилище.
Но теперь скажите, что вы исправили ошибку foo и готовы включить ее в основную ветку. Сначала вы хотите интегрировать его с изменениями прошлой ночи:
Команда
rebase
заставляет ваш репозиторий выглядеть так, как будто вы исправили ошибку foo поверх новой функции прошлой ночи. (Это вроде какsvn update
, но более гибкий и мощный.)Теперь, чтобы получить это в вашем центральном мастере:
Мы относились к мастеру как к особенному, но это только условно. Вы можете также легко делиться работой над разными ветками разных репозиториев через репозиторий git
static
.источник
git init --bare
нет других аргументов. Он будет использовать либо текущий рабочий каталог, либо параметр среды GIT_DIR, если он установлен. Я считаю, что вам нужен git 1.6.5.x, чтобы он мог принять аргумент каталога.Если у вас есть центральный сервер с центральным git-репозиторием, этот репозиторий должен быть
bare
репозиторием. Голые репозитории не имеют рабочих копий файлов в них. Следовательно, если вы работаете на этом центральном компьютере, вы работаете не с центральным репозиторием напрямую, а с локальным клоном.источник
Этот ответ аналогичен ответу gbacon , но использует подход, при котором у вас уже есть локальная настройка репо, и вы хотите создать удаленный мастер, который рассматривается как центральный репо. Это просто добавление деталей из другого подхода.
Я использую git для хранения своих файлов конфигурации точек. Я толкаю и вытаскиваю то, что считаю «центральным репо». Весьма удобно сбросить все мои точечные файлы через несколько компьютеров.
Это создало пустой репо на сайте репо.
Теперь, если у меня уже есть локальный репо, я могу перенести его на удаленный сайт.
chdir в локальный каталог.
Добавьте удаленное репо в качестве источника, чтобы push / pull действовали на это репо.
Переместите моего мастера к источнику (как ранее помечено через git remote). Теперь это удаленное репо считается моим «центральным репо». Все мои git push / pull будут взаимодействовать с источником.
Если я перейду к другому хосту, я могу легко вытащить с помощью клона репо в другое место.
Если я хочу заняться разработкой ПО на удаленном сервере, я сначала клонирую, а затем возвращаюсь в исходное хранилище.
Скорее всего, вам придется настроить ваш,
git config --add branch.master.remote origin
такgit pull
что не жалуйтесь, что вы недостаточно конкретны. Другой альтернативой является установка вашей главной ветви--track
на удаленный источник. Полезно, если у вас есть несколько филиалов.источник
Я только что исследовал эту проблему сегодня. Этот блог пост имеет много дискуссий по этому вопросу, но , по мнению большинства , чтобы делать то , что сказал Манни. Посмотрите на комментарий к сообщению Дэвида Френча, чтобы узнать о некоторых других возможностях, в том числе о том, что делать, если в результате вы по ошибке отправили репозиторий, у которого была незавершенная работа в индексе или рабочем дереве. «git reset –soft HEAD ^» отменит внесенные изменения, не мешая вашей работе.
источник