D'une manière ou d'une autre, quand j'ai git init
édité mon dernier projet il y a environ un mois, j'ai exécuté la commande dans le répertoire un répertoire plus haut que la racine de mon projet.
Donc, mon référentiel est dans le ./project
répertoire et non dans le ./project/my-new-project
répertoire. Je ne sais pas comment je n'ai pas réalisé le problème plus tôt, mais je n'ai simplement jamais cherché le répertoire .git jusqu'à présent.
Existe-t-il un moyen, sans tuer mon projet, de déplacer le référentiel vers le bon répertoire et de dire à git quelle est la nouvelle base du projet? Le simple déplacement du répertoire ne fonctionne pas. Git pense que tous les fichiers ont été supprimés.
J'ai eu le problème inverse - j'ai dû déplacer la racine git vers le répertoire parent (du projet / src au projet) À ma grande surprise, ce qui suit a fonctionné !!
git a intelligemment détecté que tous les nouveaux fichiers étaient des versions renommées des anciens et qu'aucun historique n'a été perdu
Vous pouvez essayer quelque chose de similaire ... déplacez le dossier .git et ajoutez à nouveau les fichiers avant de valider
la source
git rm'd
les fichiers de leur ancien emplacement, doncgit status
(correctement) fini par rapporter un certain nombre d'opérations de changement de nom. Plus je travaille avec git, plus je l'aime..gitignore
et exécutégit add -A
dans le dossier racine; après cela, git a correctement montré tous les fichiersrenamed
plutôt quedeleted
. 2. Puisque j'utilise des sous-modules, j'ai dû passer.gitmodules
à la nouvelle racine et mettre à jour le chemin du sous-module dans les différents fichiers de configuration de git. Pour trouver les fichiers à modifier, j'ai courugrep -nrI --color 'old/path/to/submodule' .
Cela a fonctionné pour moi et a gardé toute mon histoire intacte. À partir du dossier racine incorrect (le parent où vous avez accidentellement initialisé le dépôt):
Déplacez le dossier:
Réinitialisez le dépôt git:
Ajoutez à nouveau tous les fichiers, validez et envoyez:
Terminé! Procurez-vous une bière.
Lorsque vous validez le dépôt git après la réinitialisation, vous obtiendrez un tas de résultats qui ressemblent à ceci:
En d'autres termes, toutes vos références du dossier parent et en cours de renommée pour utiliser le dossier correct.
la source
git filter-branch
vous permet de réécrire l'histoire de cette manière. Lagit filter-branch
page de manuel a même votre cas comme exemple :Vous souhaitez probablement
git clone
placer le dépôt dans un nouveau sous-répertoire avant (ou après?) L'git filter-branch
exécution. (Le clonage avant la branche de filtre et l'exécution de la branche de filtre sur le nouveau clone auraient l'avantage de laisser le.git/
répertoire d' origine en place comme sauvegarde en cas de problème.)la source
.git
dépôt reste au niveau supérieur tandis que les sous-répertoires deviennent «considérés comme la racine») - cela supprimera littéralement tous les autres fichiers du dépôt et déplacera tous lessubdirectory/*
fichiers vers le dossier racine .git push --force
mise à jour du référentiel en amont après cela.Git peut se souvenir des fichiers avec leurs hachages,
Déplacez simplement votre
.git
répertoire racine et ditesgit
de vous souvenir de tous les changements de fichiers avec l'--all
option.la source
Utilisez
git-mv
pour déplacer vos fichiers "vers le haut" vers l'emplacement approprié, puisgit-rm
le répertoire "mon-nouveau-projet".la source
Je suis venu ici à la recherche d'un moyen de déplacer mon référentiel n'importe où .
Au cas où, je n'étais pas le seul, voici ce que j'ai fait à la fin:
https://git.wiki.kernel.org/index.php/GitFaq#How_do_I_clone_a_repository_with_all_remotely_tracked_branches.3F I « git clone --mirror » da copie nue de ma pension et il dit plus tard de ne pas être plus nu, de sorte que les fichiers montrais up dans ce nouveau dossier. (Ensuite, j'ai vérifié si les fichiers et le journal étaient apparus ou non.) J'ai gardé l'ancien dépôt pendant un moment, juste au cas où ...
De cette façon, j'ai pu déplacer mon repo sans perdre l'historique.
Meilleures salutations, Dinah
la source
mv /path/to/the/old/location/of/the/repo /path/to/the/new/location/of/the/repo
.Après avoir traversé ce même problème, ma solution finale était:
git reset --hard HEAD
Cela a fonctionné comme par magie sans aucun impact sur l'histoire. - NB Si vous avez apporté des modifications, assurez-vous de les valider avant le déplacement du répertoire .git.
la source
Il y a deux façons ici:
la source