git: clone не переносит все файлы?

#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)
  

Итак, в двух словах, вот в чем мне нужна помощь:

  1. Выясните, как клонировать все мои файлы из / live /website в /developer1
  2. Иметь возможность вносить изменения в файлы локально на 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:

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

  1. Инициализируйте простое репозиторий на вашем сервере, как вы написали:
    git --bare init --shared=0777

  2. Извлеките этот каталог из вашей workstation1:
    git clone git://server/repo.git

  3. Поместите некоторые файлы в это недавно клонированное репозиторий и добавьте их в трек. Чтобы добавить их все, выполните git add .

  4. Зафиксируйте добавленные файлы в локальном репозитории:
    git commit -m 'initial commit'
    Теперь изменения (добавление файлов) были сохранены в локальном репозитории.

  5. Наконец, отправьте файлы обратно (при условии, что вы работаете на главном сервере ветки) на сервер (известный как origin):
    git push origin master

  6. Теперь внесите еще несколько локальных изменений и зафиксируйте их в локальном репозитории, как на шаге 4. Когда вы вводите git status now, должно появиться сообщение типа
    Your branch is ahead of origin/whatever by 1 commit

  7. Чтобы вернуть изменения обратно в центральное хранилище, вы можете просто ввести 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 использовать эту папку и выполнять разработку в своих локальных папках. Я собираюсь также посмотреть, как отменить a git 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 с веткой?