Перемещение содержимого репозитория Git в другой хранилище, сохраняющее историю

Я пытаюсь переместить только содержимое одного репозитория (например, repo1) в другой существующий репозиторий (скажем, repo2), используя следующие команды:

  • git clone repo1
  • git clone repo2
  • cd repo1
  • git remote rm origin
  • git удаленное добавление repo1
  • git нажмите

Но он не работает. Я просмотрел другую аналогичную запись, но я только нашел перемещение папки, а не содержимое.

Ответы

Ответ 1

Я думаю, что команды, которые вы ищете, следующие:

cd repo2
git checkout master
git remote add r1remote **url-of-repo1**
git fetch r1remote
git merge r1remote/master --allow-unrelated-histories
git remote rm r1remote

После этого repo2/master будет содержать все от repo2/master и repo1/master, а также будет иметь историю обоих из них.

Ответ 2

Совершенно описано здесь https://www.smashingmagazine.com/2014/05/moving-git-repository-new-server/

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

git fetch origin

Мы можем проверить любые недостающие ветки, которые нам нужны, чтобы создать локальную копию:

git branch -a

Позволяет использовать SSH-клонированный URL нашего нового репозитория для создания нового удаленного в нашем существующем локальном репозитории:

git remote add new-origin [email protected]:manakor/manascope.git

Теперь мы готовы вытолкнуть все локальные ветки и теги на новый пульт с именем new-origin:

git push --all new-origin 
git push --tags new-origin

Давайте сделаем новое начало пустым по умолчанию:

git remote rm origin

Переименуйте новое происхождение в исходное положение, чтобы оно стало удаленным по умолчанию:

git remote rename new-origin origin

Ответ 3

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

git clone --mirror https://github.com/account/repo.git cloned-repo
cd cloned-repo
git push --mirror {URL of new (empty) repo}

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

git clone -o old https://github.com/account/repo.git my-repo
cd my-repo
git remote add new {URL of new repo}

Чтобы вывести последние обновления (при отсутствии локальных изменений):

git checkout {branch(es) of interest}
git pull old
git push --all new

NB: Мне еще нужно использовать подмодули, поэтому я не знаю, какие дополнительные шаги могут потребоваться, если они у вас есть.

Ответ 4

Это помогло перенести мое локальное репо (включая историю) в мое удаленное репозиторий на github.com. После создания нового пустого репо на GitHub.com я использую URL на третьем шаге ниже, и он прекрасно работает.

git clone --mirror <url_of_old_repo>
cd <name_of_old_repo>
git remote add new-origin <url_of_new_repo>
git push new-origin --mirror

Я нашел это по адресу: https://gist.github.com/niksumeiko/8972566

Ответ 5

Похоже, ты рядом. Предполагая, что это не просто опечатка в вашем представлении, шаг 3 должен быть cd repo2 вместо repo1. И шаг 6 должен быть git pull не толкать. Пересмотренный список:

1. git clone repo1
2. git clone repo2
3. cd repo2
4. git remote rm origin
5. git remote add repo1
6. git pull
7. git remote rm repo1
8. git remote add newremote

Ответ 6

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

Клонировать старый репозиторий на локальный.

git clone --bare <STASH-URL>

Создайте пустой репозиторий в GitLab.

git push --mirror <GitLab-URL>

Ответ 7

Самый простой подход, если Git уже отслеживает код, а затем установить новый репозиторий в качестве "источника", на который нужно нажать.

cd existing-project
git remote set-url origin https://clone-url.git
git push -u origin --all
git push origin --tags

Ответ 8

Согласно ответу @Dan-Cohn Mirror-push ваш друг здесь. Это мой путь для переноса репозиториев:

Зеркальное отображение хранилища

1 G Open Git Bash.

2. Создайте голый клон хранилища.

$ git clone --bare https://github.com/exampleuser/old-repository.git

3. Зеркальное нажатие на новый репозиторий.

$ cd old-repository.git
$ git push --mirror https://github.com/exampleuser/new-repository.git

4. Удалите временный локальный репозиторий, созданный на шаге 1.

$ cd ..
$ rm -rf old-repository.git

Ссылка и кредит: https://help.github.com/en/articles/duplicating-a-repository

Ответ 9

Здесь много сложных ответов; однако, если вы не заинтересованы в сохранении ветки, все, что вам нужно сделать, это reset удаленное происхождение, установить восходящий поток и нажать.

Это помогло сохранить всю историю фиксации для меня.

cd <location of local repo.>
git remote set-url origin <url>
git push -u origin master