Question Comment convertir un dépôt Git normal en un dépôt vide?


Comment puis-je convertir un dépôt Git 'normal' en un seul fichier?

La principale différence semble être:

  • dans le référentiel git normal, vous avez un .git dossier à l'intérieur du référentiel contenant toutes les données pertinentes et tous les autres fichiers construire votre copie de travail

  • dans un référentiel Git nu, il n'y a pas de copie de travail et le dossier (appelons-le repo.git) contient les données réelles du référentiel


530
2018-02-04 13:18


origine


Réponses:


En bref: remplacer le contenu de repo avec le contenu de repo/.git, puis dites au dépôt qu'il est maintenant un dépôt nu.

Pour ce faire, exécutez les commandes suivantes:

cd repo
mv .git ../repo.git # renaming just for clarity
cd ..
rm -fr repo
cd repo.git
git config --bool core.bare true

Notez que cela est différent de faire un git clone --bare à un nouvel emplacement (voir ci-dessous).


526
2018-02-04 15:06



Votre méthode semble fonctionner; la structure de fichier d'un référentiel nu correspond exactement à ce qui se trouve dans le répertoire .git. Mais je ne sais pas si l'un des fichiers est réellement changé, donc si cela échoue, vous pouvez simplement faire

git clone --bare /path/to/repo

Vous aurez probablement besoin de le faire dans un répertoire différent pour éviter un conflit de noms, et vous pourrez ensuite le ramener à l'endroit voulu. Et vous devrez peut-être changer le fichier de configuration pour pointer vers où votre repo d'origine est.


230
2018-02-04 13:26



Je pense que le lien suivant serait utile

GitFaq: Comment rendre le référentiel non nu existant?

$ mv repo/.git repo.git
$ git --git-dir=repo.git config core.bare true
$ rm -rf repo

111
2017-08-03 01:46



À moins que vous ne vouliez spécifiquement ou que vous ayez besoin de twipser des bits sur le système de fichiers, il est vraiment simple de créer une version nue d'un dépôt non nu (mentionné dans plusieurs autres articles ici). Cela fait partie des fonctionnalités de base de git:

git clone --bare reponame bare_reponame


58
2018-03-08 17:36



Je voulais juste pousser vers un dépôt sur un chemin réseau mais git ne me laisserait pas faire ça à moins que ce dépôt ne soit marqué comme nu. Tout ce dont j'avais besoin était de changer sa config:

git config --bool core.bare true

Pas besoin de jouer avec les fichiers à moins de vouloir le garder propre.


6
2018-02-24 06:30



S'il vous plaît également envisager d'utiliser

git clone --mirror path_to_source_repository

Du Documentation:

Configurez un miroir du référentiel source. Cela implique --bare. Comparé à --bare, --mirror non seulement mappe les branches locales de la source vers les branches locales de la cible, il mappe toutes les références (y compris les branches de suivi à distance, les notes, etc.) et configure une configuration refspec telle que toutes ces références sont remplacés par une mise à jour distante git dans le référentiel cible.


6
2017-08-04 06:40



J'ai lu les réponses et j'ai fait ceci:

cd repos
mv .git repos.git
cd repos.git
git config --bool core.bare true # from another answer
cd ../
mv repos.git ../
cd ../
rm -rf repos/ # or delete using a file manager if you like

cela laissera le contenu de repos/.git comme le nu repos.git


5
2017-08-12 03:11