web-dev-qa-db-fra.com

Déplacer un référentiel git

Cette question peut être stupide, mais je me le demande depuis un certain temps. Il s'agit de référentiels git, mais je suppose que c'est la même chose pour les référentiels locaux pour les autres DVCS.

Disons que mon projet est comme ça quand il démarre:

  • Projet
    • .git
    • tous les autres dossiers du projet

Voilà comment cela fonctionnerait lorsque vous l'installez, n'est-ce pas?

Disons que je déplace le dossier Project ailleurs, devrais-je changer quelque chose? Ou est-ce que tout le contenu du référentiel dans le dossier .git est relatif uniquement au dossier Project en ignorant toute l'arborescence de fichiers au-dessus de Project.

Je suis presque sûr que le déplacement du projet n'aurait pas d'importance, mais je voulais juste m'en assurer.

61
Portaljacker

Oui, tout dans .git est relatif. Si vous avez ajouté le référentiel en tant que télécommande nommée à un autre référentiel, vous devrez cependant modifier l'URL distante dans cet autre référentiel.

23
David Z

J'ai trouvé que les sous-modules ne sont pas relatifs dans git.

Donc, si vous souhaitez déplacer un projet contenant des sous-modules, vous devez modifier le .git dans le sous-module, ainsi que l'attribut "worktree" dans le fichier de configuration du sous-module, qui est stocké dans le .git/modules/MODULENAME/config fichier.

62
Brent Baccala

Afficher la télécommande actuelle (c'est une étape facultative bien sûr):

$ git remote show Origin
* remote Origin
URL: git@oldserver:project.git
Remote branch(es) merged with 'git pull' while on branch master
master
Tracked remote branches
master

Ce que nous devons faire est de supprimer l'origine actuelle et d'ajouter la nouvelle:

$ git remote rm Origin
$ git remote add Origin git@newserver:project.git
$ git remote show Origin
* remote Origin
URL: git@newserver:project.git
Remote branch(es) merged with 'git pull' while on branch master
master
error: refs/remotes/Origin/HEAD points nowhere!
New remote branches (next fetch will store in remotes/Origin)
master

Ne vous inquiétez pas de l'erreur affichée par la dernière commande. Le premier tirage de l'Origin le corrigera:

$ git pull
From git@newserver:project.git
* [new branch]      master     -> Origin/master
Already up-to-date.
$ git remote show Origin
* remote Origin
URL: git@newserver:project.git
Remote branch(es) merged with 'git pull' while on branch master
master
Tracked remote branches
master

Je suis encore frais avec Git, alors peut-être que c'est une meilleure façon de le faire, mais cela a fonctionné pour moi.

10
Eduardo Cuomo

Non, vous n'auriez rien d'autre à changer. C'est

  • en supposant qu'aucun script ne définit GIT_DIR, GIT_WORKTREE ou GIT_INDEX directement (peu probable)
  • vous n'avez aucun référentiel externe pointant vers cette copie

    • si vous le faites, vous devrez repoint les en utilisant

      git remote set-url [--Push] Origin user@yourhost:/home/user/newlocation/Project
      

(Origin doit être le nom de la télécommande; Origin est le nom par défaut lors du clonage à partir d'un référentiel distant)

6
sehe

Vous pouvez déplacer le répertoire git d'une machine à une autre ou dire que vous souhaitez migrer votre dossier de projet.

Toutes les informations sur Origin sont stockées dans le dossier '.git', qui est créé lorsque vous initialisez un référentiel git sous un répertoire sur votre système.

Procédure

  1. : Déplacez le dossier du projet vers un autre emplacement.
  2. : Si le dossier du projet est déplacé vers une nouvelle machine, créez la paire de clés SSH correspondante.
  3. : Dites à git qui vous utilisez: git config --global user.email "your_git_email_id @ youremail"
1
Mansab Uppal