web-dev-qa-db-fra.com

Déplacement du contenu du référentiel Git vers un autre référentiel en préservant l'historique

J'essaie de déplacer uniquement le contenu d'un référentiel (par exemple, repo1) vers un autre référentiel existant (par exemple, repo2) à l'aide des commandes suivantes.

  1. git clone repo1
  2. git clone repo2
  3. cd repo1
  4. origine git
  5. git remote ajouter repo1
  6. git Push

Mais ça ne marche pas. J'ai examiné l'autre message similaire, mais je n'ai trouvé que le déplacement du dossier, pas le contenu.

110
Mario

Je pense que les commandes que vous recherchez sont:

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

Après ça repo2/master contiendra tout de repo2/master et repo1/master, et aura également l'histoire de tous les deux.

188
Chronial

Parfaitement décrit ici https://www.smashingmagazine.com/2014/05/moving-git-repository-new-server/

Tout d'abord, nous devons extraire toutes les branches distantes et les balises du référentiel existant vers notre index local:

git fetch Origin

Nous pouvons rechercher les branches manquantes pour lesquelles nous devons créer une copie locale:

git branch -a

Utilisons l’URL clonée SSH de notre nouveau référentiel pour créer une nouvelle télécommande dans notre référentiel local existant:

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

Nous sommes maintenant prêts à envoyer toutes les branches et étiquettes locales à la nouvelle télécommande nommée new-Origin:

git Push --all new-Origin 
git Push --tags new-Origin

Faisons de new-Origin la télécommande par défaut:

git remote rm Origin

Renommez new-Origin en Origin seulement, pour qu’il devienne la télécommande par défaut:

git remote rename new-Origin origin
40
Sergey Onishchenko

Si vous cherchez à préserver les branches existantes et à valider l'histoire, voici une solution qui a fonctionné pour moi.

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

Supposons maintenant que vous souhaitiez synchroniser les dépôts source et de destination pendant un certain temps. Par exemple, il existe toujours une activité dans le référentiel distant actuel que vous souhaitez importer dans le référentiel nouveau/de remplacement.

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

Pour afficher les dernières mises à jour (en supposant que vous n'avez pas de modifications locales):

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

NB: Je n'ai pas encore utilisé de sous-modules, donc je ne sais pas quelles étapes supplémentaires pourraient être nécessaires si vous les avez.

11
Dan Cohn

Cela a permis de déplacer mon dépôt local (y compris l'historique) vers mon dépôt distant github.com. Après avoir créé le nouveau référentiel vide sur GitHub.com, j'utilise l'URL de l'étape trois ci-dessous et cela fonctionne très bien.

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

J'ai trouvé ceci à: https://Gist.github.com/niksumeiko/8972566

5
raddevus

L'approche la plus simple si le code est déjà suivi par Git, puis configurez le nouveau référentiel comme "Origine" sur Push to.

cd existing-project
git remote set-url Origin https://clone-url.git
git Push -u Origin --all
git Push Origin --tags
3
Martin

Selon @ Dan-Cohn, Mirror-Push est votre ami ici. Ceci est mon aller à la migration des pensions:

Mise en miroir d'un référentiel

1Open Git Bash.

2. Créez un clone nu du référentiel.

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

3. Mirror-Push vers le nouveau référentiel.

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

4.Retirez le référentiel local temporaire créé à l'étape 1.

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

Référence et crédit: https://help.github.com/en/articles/duplicating-a-repository

1
DalSoft

On dirait que tu es proche. En supposant qu'il ne s'agisse pas d'une faute de frappe dans votre soumission, l'étape 3 devrait être cd repo2 Au lieu de repo1. Et l'étape 6 devrait être git pull Et non pas Push. Liste retravaillée:

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
1
Eric Palace

J'ai utilisé la méthode ci-dessous pour migrer mon stock GIT Stash vers GitLab en conservant toutes les branches et l'historique de validation.

Cloner l'ancien référentiel en local.

git clone --bare <STASH-URL>

Créez un référentiel vide dans GitLab.

git Push --mirror <GitLab-URL>
1