#git
#git
Вопрос:
Я только что создал каталог с именем website
. Здесь есть пара изображений, index.html страница и т.д. Я запустил : git --bare init --shared=0777
Теперь он успешно создал пустое общее хранилище.
Теперь я пытаюсь клонировать этот проект, заходя /developers/developer1
на свой сервер и запуская git clone /live/website
. Я получаю следующее сообщение:
Initialized empty Git repository in /developer/developer1/website/.git/
warning: You appear to have cloned an empty repository.
Я использую UNIX. Когда я делаю ls
, все, что я вижу, это папку .git и ни одно из изображений / index.html страница была клонирована здесь. Я пытался сделать:
git pull /live/website origin
fatal: Couldn't find remote ref origin
fatal: The remote end hung up unexpectedly
git pull /live/website master
fatal: Couldn't find remote ref master
fatal: The remote end hung up unexpectedly
Я знаю, что мне нужно делать, origin
потому что, когда я делаю git remote -v
, вот что я получаю:
origin /live/website (fetch)
origin /live/website (push)
Итак, в двух словах, вот в чем мне нужна помощь:
- Выясните, как клонировать все мои файлы из / live /website в /developer1
- Иметь возможность вносить изменения в файлы локально на developer1 и возвращать эти изменения обратно.
Однако, поскольку я, похоже, не могу получить файлы в первую очередь, я не могу продолжить! Основная цель состоит в том, чтобы позволить множеству разработчиков одновременно работать с файлами и отправлять свои изменения в основной /live/website
каталог, как только они будут сделаны.
Комментарии:
1. С вашими командами
git pull /live/website origin
иgit pull /live/website master
, я думаю, вы имеете в видуgit pull origin master
. Это эквивалентно,git pull /live/website master
посколькуorigin
сопоставляется с/live/website
, ноgit pull origin master
так легче читать.2. Спасибо за совет, Кэмерон. Однако раньше я думал, что origin — это ветвь, вот почему я пытался это сделать. Теперь я понимаю, что это просто сопоставление с / live /website … (или исходный код, из которого он был клонирован).
Ответ №1:
Вам нужно выполнить некоторые шаги, чтобы получить файлы в вашем репозитории. Предположим, у вас есть сервер, на котором хранится исходный репозиторий, и несколько рабочих станций, на которых выполняется фактическая работа.
-
Инициализируйте простое репозиторий на вашем сервере, как вы написали:
git --bare init --shared=0777
-
Извлеките этот каталог из вашей workstation1:
git clone git://server/repo.git
-
Поместите некоторые файлы в это недавно клонированное репозиторий и добавьте их в трек. Чтобы добавить их все, выполните
git add .
-
Зафиксируйте добавленные файлы в локальном репозитории:
git commit -m 'initial commit'
Теперь изменения (добавление файлов) были сохранены в локальном репозитории. -
Наконец, отправьте файлы обратно (при условии, что вы работаете на главном сервере ветки) на сервер (известный как origin):
git push origin master
-
Теперь внесите еще несколько локальных изменений и зафиксируйте их в локальном репозитории, как на шаге 4. Когда вы вводите
git status
now, должно появиться сообщение типа
Your branch is ahead of origin/whatever by 1 commit
-
Чтобы вернуть изменения обратно в центральное хранилище, вы можете просто ввести
git push
, поскольку вы настроили отслеживание ветки на шаге 5.
Теперь, если вы выполняете git clone git://server/repo.git
с другого компьютера (например, workstation2), вы получите файлы, которые вы только что зарегистрировали…
Это общий рабочий процесс git:
- Получить файлы с сервера (начальные:
clone
, последовательныеpull
) - Внесите некоторые изменения и сохраните их в локальном репозитории (
git commit
) - Когда придет время, перенесите локальные коммиты обратно в чистое репозиторий (
git push
)
Чтобы получить более подробное объяснение, смотрите раздел Private Small Team в онлайн-версии книги по progit.
Комментарии:
1. Спасибо за помощь! Имеет ли значение, что я использую master, а push не работает напрямую? Кроме того, я вижу файлы, когда я их извлекаю. Однако я не вижу файлов, присутствующих в самом репозитории —bare. Могу ли я что-нибудь сделать? Причина в том, что я хочу использовать это как свою оперативную папку с последней версией веб-сайта, и разработчики могут в принципе проверять версию и вносить изменения локально.
2. У
bare
репозитория нет рабочей копии, поэтому файлы в нем отображаться не будут. Я подозреваю, что в вашем случае вы не хотите, чтобы живая версия была пустой. Возможно, вы захотите рассмотреть возможность использования перехвата после получения или после обновления, который копирует коммиты на текущий сайт, а не отправляет их напрямую.3. @g1t: спасибо, что указали, что начальная последовательность моего ответа не сработала. Переработаны (и фактически протестированы) описанные шаги. Теперь все должно работать нормально.
4. Кэм, ты прав. Я не должен использовать
bare
. Я читал несколько онлайн-руководств, и в одном из них упоминалось, что нажатие / извлечение из неосновного репозитория вызывало проблемы. Я действительно хочу иметь возможность просматривать последние файлы, поэтому, полагаю, мне нужно пойти на этот риск. Однако могу ли я ограничить ветви в этом реальном репозитории? Я просто хочу, чтобы люди моглиpull/push
использовать эту папку и выполнять разработку в своих локальных папках. Я собираюсь также посмотреть, как отменить agit push
. экес, еще раз спасибо! Я только что увидел ссылку в вашем посте, я собираюсь попробовать и посмотреть, что я могу из этого извлечь ..
Ответ №2:
когда вы создаете репозиторий с git init
, он запускается как пустой репозиторий. сначала вы должны добавить файлы ( git add -- file1 file2 other files
), а затем создать коммит ( git commit -m'initial commit'
).
затем вы должны иметь возможность клонировать указанный репозиторий с помощью git clone
и извлекать из него данные
Комментарии:
1. Я создал свой репозиторий как —bare. Насколько я понимаю, это означает, что у меня нет такой рабочей ветки, как master. Я попробовал ваше предложение в своем
/live/website
каталоге и, как и ожидалось, вот ошибка, которую я получаю: git add . фатальный: эта операция должна быть выполнена в рабочем дереве2. репозиторий —bare при создании такой же пустой, как и обычный репозиторий. вы должны подтолкнуть к этому, прежде чем сможете его клонировать
3. Хм, то есть вы хотите сказать, что наличие файлов в каталоге, а затем инициализация его как пустого, не имеет никакого значения? Мне нужно создать его, а затем
git push <a_branch>
внедрить в него, чтобы он отслеживал все файлы?4. репозиторий bere не знает, где он находится, и что вы хотите, чтобы файлы автоматически устанавливали версии. как это должно работать?
5. сначала вы должны создать коммит, содержащий файлы (вы читали мой ответ?), а затем нажать на / live /website2 (
git push /live/website2 master
). чтобы иметь возможность использовать origin, вам нужно сначала добавить удаленный (git remote add origin /live/website2
). также вы, кажется, путаете origin с веткой?