Централизованное Git хранилище, начиная с локального - PullRequest
1 голос
/ 03 марта 2020

Предположим, я хочу создать репозиторий Git с SVN-подобным рабочим процессом (поэтому централизованный репозиторий по URL-адресу, на который ссылается каждый разработчик).

Я понял, что вы можете добавить sh в репозиторий Bare. без ограничений (но групповые права и лайки), но вы не можете на обычном без использования опции силы. Таким образом, центральный репозиторий типа SVN должен быть инициализирован голым. Правильно ли я понял?

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

Пока я использую следующий метод, но я не уверен, что этого достаточно:

В удаленной папке my_project . git:

  • git init --bare

А теперь исключительно в локальной папке my_project с существующим репо:

  • git remote add origin url_to_my_project.git
  • git push -u --all

Этого достаточно?

Когда я клонирую централизованное репо в другом локальном месте, новое репо не кажется строго эквивалентным, чем оригинальная локальная копия. При использовании команды git branch -a у меня два разных результата, и моих знаний git в настоящее время недостаточно, чтобы понять, что произошло.

В исходном локальном хранилище:

> git branch -a
* master
  remotes/origin/master

В локальном репозиторий, клонированный из централизованного пульта:

> git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/master

Что именно случилось, что две копии не выглядят эквивалентно?

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 09 марта 2020

Ветви в удаленном репозитории переименовываются как remote/<remote-name>/<branch-name> в локальной копии (по умолчанию), чтобы избежать конфликта имен между локальным и удаленным репозиториями.

Если вы хотите поведение, подобное SVN (то есть совместно использовать то же самое) пространство имен ветви), вы можете отредактировать отображение на .git/config по своему усмотрению:

# default configuration ('master' branch on remote corresponds to 'remotes/origin/master' branch on local)
[remote "origin"]
    url = git@github.com:example/url_to_my_project.git
    fetch = +refs/heads/master:refs/remotes/origin/master

Например:

# SVN-like configuration ('master' branch on remote corresponds to 'master' branch on local)
[remote "origin"]
    url = git@github.com:example/url_to_my_project.git
    fetch = +refs/heads/master:refs/heads/master

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

См. раздел refspe c в Git Book и связанных вопросах и ответах .

1 голос
/ 07 марта 2020

Таким образом, центральный репозиторий, подобный SVN, должен быть полностью инициализирован. Я правильно понял? Перемещение в пустой репозиторий (без проверки рабочего дерева, на которое может повлиять pu sh) - лучшая практика .

git init --bare; 
# local: 
git remote add origin url_to_my_project.git
git push -u --all

Достаточно ли этого?

Да.
При условии, что у вас есть прослушиватель: s sh daemon (как указано в « Getting Git на сервере ») или HTTPS-сервер (используется для smart HTTP )

Когда я клонирую централизованное репо в другом локальном месте, новое репо не выглядит строго эквивалентным исходной локальной копии.
При использовании git branch -a Команда, у меня есть два разных результата,

Что ожидается:

...