Git push repo existant vers un nouveau serveur de repo distant différent?

Disons que j'ai un dépôt sur git.fedorahosted.org et je veux cloner cela dans mon compte sur github pour avoir mon propre terrain de jeu en dehors du repo plus "officiel" sur fedorahosted. Quelles seraient les étapes pour copier initialement cela? Dans github il y a ce joli bouton "fork", mais je ne peux pas l'utiliser pour des raisons évidentes.

Et comment pourrais-je suivre les changements dans le repo fedorahosted dans le GitHub?

343
demandé sur Heiko Rupp 2011-03-03 17:13:07

8 réponses

  1. créez un nouveau repo sur github.
  2. clonez le repo de fedorahosted sur votre machine locale.
  3. git remote rename origin upstream
  4. git remote add origin URL_TO_GITHUB_REPO
  5. git push origin master

Maintenant, vous pouvez l'utiliser comme n'importe quel autre dépôt github. Pour extraire les correctifs depuis l'amont, exécutez simplement git pull upstream master && git push origin master.

545
répondu troelskn 2013-08-11 10:24:43

Il y a une réponse supprimée sur cette question qui avait un lien utile: https://help.github.com/articles/duplicating-a-repository

L'essentiel est

0. create the new empty repository (say, on github)
1. make a bare clone of the repository in some temporary location
2. change to the temporary location
3. perform a mirror-push to the new repository
4. change to another location and delete the temporary location
Exemple de

OP:

Sur votre machine locale

$ cd $HOME
$ git clone --bare https://git.fedorahosted.org/the/path/to/my_repo.git
$ cd my_repo.git
$ git push --mirror https://github.com/my_username/my_repo.git
$ cd ..
$ rm -rf my_repo.git
81
répondu mob 2014-04-16 22:18:21

Pour pousser votre repo existant dans différent, vous devez:

  1. Clonez d'abord le dépôt d'origine.

    git clone https://git.fedorahosted.org/cgit/rhq/rhq.git
    
  2. Poussez les sources clonées vers votre nouveau référentiel:

    cd rhq
    git push https://github.com/user/example master:master
    

, Vous pouvez changer master:master dans source:destination branche.


Si vous voulez pousser un commit spécifique (branche), alors faites:

  1. Sur le repo d'origine, Créez et récupérez une nouvelle branche:

    git checkout -b new_branch
    
  2. Choisissez et réinitialisez le point avec lequel vous voulez commencer:

    git log # Find the interesting hash
    git reset 4b62bdc9087bf33cc01d0462bf16bbf396369c81 --hard
    

    Vous pouvez également sélectionner la validation par git cherry-pick à ajouter dans la tête existante.

  3. , Puis poussez vers votre nouveau repo:

    git push https://github.com/user/example new_branch:master
    

    Si vous rebasez, utilisez -f pour forcer la poussée (non recommandé). Exécuter git reflog pour voir l'historique des modifications.

30
répondu kenorb 2016-07-12 00:44:19

Voulez-vous vraiment simplement pousser votre référentiel local (avec ses branches locales, etc.) à la nouvelle télécommande ou voulez-vous vraiment le miroir de l'ancienne télécommande (avec toutes ses branches, tags, etc) sur la nouvelle télécommande? Si ce dernier est un excellent blog sur Comment refléter correctement un dépôt git .

Je vous encourage fortement à lire le blog pour quelques détails très importants, mais la version courte est la suivante:

Dans un nouveau répertoire exécutez ces commandes:

git clone --mirror git@example.com/upstream-repository.git
cd upstream-repository.git
git push --mirror git@example.com/new-location.git
10
répondu HairOfTheDog 2016-02-11 17:53:18

Essayez ceci Comment déplacer un dépôt git complet

  1. Créez un référentiel local dans le répertoire temp-dir en utilisant:

    Git clone temp-dir

  2. Allez dans le répertoire temp-dir.

  3. Pour voir une liste des différentes branches dans ORI do:

    git branch -a
    
  4. Extraire toutes les branches que vous souhaitez copier D'ORI vers NEW en utilisant:

    git checkout branch-name
    
  5. Maintenant, récupérez toutes les balises D'ORI utilisation:

    git fetch --tags
    
  6. Avant de passer à l'étape suivante, assurez-vous de vérifier vos balises et branches locales à l'aide des commandes suivantes:

    git tag
    
    
    git branch -a
    
  7. Maintenant, effacez le lien vers le référentiel ORI avec la commande suivante:

    git remote rm origin
    
  8. Liez maintenant votre référentiel local à votre nouveau référentiel nouvellement créé à l'aide de la commande suivante:

    git remote add origin <url to NEW repo>
    
  9. Poussez maintenant toutes vos branches et balises avec ces commandes:

    git push origin --all
    
    
    git push --tags
    
  10. Toi maintenant, avoir une copie complète de votre repo ORI.

6
répondu vm345 2018-03-28 09:19:53

J'ai trouvé une solution en utilisant set-url qui est concis et assez facile à comprendre :

  1. créer un nouveau repo sur Github
  2. cd dans le référentiel existant sur votre machine locale (si vous ne l'avez pas encore cloné, faites-le d'abord)
  3. git remote set-url origin https://github.com/user/example.git
  4. git push -u origin master
3
répondu Mobiletainment 2018-03-28 12:42:30

J'ai eu le même problème.

Dans mon cas, puisque j'ai le référentiel d'origine dans ma machine locale, j'ai fait une copie dans un nouveau dossier sans fichier caché (.Git, .gitignore).

Enfin, j'ai ajouté le .gitignore fichier dans le nouveau dossier créé.

Ensuite, j'ai créé et ajouté le nouveau référentiel à partir du chemin local (dans mon cas en utilisant Github Desktop).

2
répondu itrascastro 2015-12-27 13:33:28

Si vous avez un dépôt Git existant:

cd existing_repo
git remote rename origin old-origin
git remote add origin https://gitlab.com/newproject
git push -u origin --all
git push -u origin --tags
1
répondu user3871754 2018-08-28 07:12:16