J'ai un répertoire gitrepo1 . Ce répertoire est un référentiel git.
Je voudrais déplacer ce gitrepo1 dans un autre répertoire newrepo .
Le répertoire newrepo doit être le nouveau référentiel git sans perte d'historique git et doit contenir le répertoire gitrepo1 .
Le répertoire gitrepo1 devrait être juste un répertoire maintenant (dans newrepo ), sans aucun
.git
index, c'est-à-dire qu'il ne devrait plus être un dépôt git indépendant ou un sous-module.
Comment puis-je faire ceci?
mv girepo1 newrepo
??Réponses:
C'est très simple. Git ne se soucie pas du nom de son répertoire. Il ne se soucie que de ce qu'il y a à l'intérieur. Vous pouvez donc simplement faire:
Notez que la copie est assez chère si le référentiel est volumineux et avec une longue histoire. Vous pouvez également l'éviter facilement:
Une fois que vous avez créé
newrepo
, la destination à mettregitrepo1
pourrait être n'importe où, même à l'intérieurnewrepo
si vous le souhaitez. Cela ne change pas la procédure, juste le chemin que vous écrivezgitrepo1
.la source
cp
comme presque toutes les commandes ou fonctions sont spécifiques à d'autres systèmes d'exploitation. En fait, il est spécifique à chaque système d'exploitation qui n'est pas Windows. Essayez d'appeler Microsoft et demandez-leur pourquoi ils ne sont pas POSIX. Quoi qu'il en soit,cp
signifie copie.mv
signifie bouger.rm
signifie supprimer. Vous pouvez trouver des équivalents Windows..git/
contient tout l'historique, qui comprend votre dernier commit. Où que vous le mettiez, vous avez toute l'histoire. En fait, si tous les fichiers de ce répertoire sont différents du dépôt d'origine d'où vous avez pris.git/
, la seule chose serait que cela vous indique que certains fichiers sont supprimés et que certains non suivis sont présents. Avec ungit reset --hard
, les fichiers supprimés seraient récupérés automatiquement! La seule chose à noter est qu'en copiant simplement,.git/
vous ne pouvez pas récupérer les modifications non validées.Il est un peu tard et la question est déjà répondue mais, pour le faire sans aucun mal de tête:
git status
, disons le développement de branchegit clone
le projet du repo vers le nouveau dossiergit checkout development
rsync
, à l' exclusion du dossier .git :rsync -azv --exclude '.git' gitrepo1 newrepo/gitrepo1
Ensuite, vous êtes prêt à continuer là où vous vous êtes arrêté
la source
C'est encore plus simple que ça. Je viens de faire ceci (sous Windows, mais cela devrait fonctionner sur un autre système d'exploitation):
Git voit juste que vous avez ajouté un répertoire et renommé un tas de fichiers. Pas de problème.
la source
Je ne suis pas un expert, mais je copie le dossier .git dans un nouveau dossier, puis j'appelle:
git reset --HARD
la source