Je veux cloner un dépôt GIT et ne PAS me retrouver avec un .git
répertoire. En d'autres termes, je veux juste les fichiers. Y a-t-il un moyen de faire cela?
git clone --no-checkout
fait exactement le contraire de ce que je veux (m'a donné juste le .git
répertoire).
J'essaie de le faire pour un dépôt distant , pas local, ce qui signifie que ce n'est pas un double de " Comment faire une" exportation git "(comme" svn export ") " (même si la solution pourrait finir par être la même).
git archive
est maintenant (Q4 2017) plus précise et n'inclura pas de dossiers vides.Réponses:
La commande git qui serait la plus proche de ce que vous recherchez le ferait
git archive
.Voir sauvegarde du projet qui utilise git : il inclura dans une archive tous les fichiers (y compris les sous-modules si vous utilisez le
git-archive-all
script)Vous pouvez ensuite utiliser cette archive n'importe où, en ne renvoyant que des fichiers, pas de
.git
répertoire.Si vous avez besoin de dossiers et de fichiers uniquement du premier niveau:
Pour répertorier uniquement les dossiers de premier niveau d'un référentiel distant:
Remarque: cela ne fonctionne pas pour GitHub (non pris en charge)
Vous auriez donc besoin de cloner (peu profond pour accélérer l'étape de clonage), puis d'archiver localement :
Une autre option serait de faire un clonage superficiel (comme mentionné ci-dessous), mais en localisant le dossier .git ailleurs.
Le dossier de dépôt n'inclurait que le fichier, sans
.git
.Remarque:
git --git-dir
est une option de la commandegit
, nongit clone
.Mise à jour avec Git 2.14.X / 2.15 (Q4 2017): cela évitera d'ajouter des dossiers vides .
Voir commit 4318094 (12 sept. 2017) de René Scharfe (``) .
Suggéré par: Jeff King (
peff
) .(Fusionné par Junio C Hamano -
gitster
- dans commit 62b1cb7 , 25 sept. 2017)la source
git --git-dir=/dev/null clone --depth=1 /url/to/repo
git archive --remote=https://github.com/pornel/dssim.git @ | tar -t
Je courstar: This does not look like a tar archive
. Cela ne fonctionne pas avec GitHub? Aussi, qu'est-ce que cela@
signifie?@
: je l'ai supprimée. De plus, GitHub ne prend pas en charge une télécommandegit archive
: j'ai édité la réponse pour proposer une alternative.pris d' ici
la source
--format=tar
est inutile. "tar" est la sortie par défaut, pas besoin de spécifier.tar x
est suffisantevous pouvez créer un clone superficiel pour n'obtenir que les dernières révisions:
puis supprimez simplement le répertoire .git ou utilisez
git archive
pour exporter votre arborescence.la source
Pourquoi ne pas effectuer un clonage puis supprimer le
.git
répertoire pour ne disposer que d'une copie de travail nue?Edit: Ou en fait, pourquoi utiliser le clone? C'est un peu déroutant quand vous dites que vous voulez un repo git mais sans
.git
répertoire. Si vous voulez dire que vous voulez juste une copie d'un état de l'arborescence, pourquoi ne pas le fairecp -R
dans le shell au lieu du clone git, puis supprimez-le.git
ensuite.la source
Il semble que vous vouliez juste une copie du code source. Si tel est le cas, pourquoi ne pas simplement copier le répertoire et exclure le répertoire .git de la copie?
la source
git checkout -f
Il existe une autre façon de faire cela en séparant le dépôt de l'arborescence de travail.
Cette méthode est utile si vous devez mettre à jour régulièrement ces fichiers git sans git. Par exemple, je l'utilise lorsque j'ai besoin d'extraire des fichiers source et de créer un artefact, puis de copier l'artefact dans un dépôt différent juste pour le déploiement sur un serveur, et je l'utilise également lorsque je pousse le code source vers un serveur lorsque je veux le code source à récupérer et à intégrer dans le répertoire www.
Nous allons créer deux dossiers, un pour le git et un pour les fichiers de travail:
initialisez un dépôt git nu:
Créez ensuite un hook de post-réception:
Modifiez la post-réception dans votre éditeur préféré:
Ajoutez ceci comme télécommande:
Désormais, chaque fois que vous poussez vers ce dépôt nu, il extrait l'arborescence de travail
/workingfiles/
. Mais/workingfiles/
lui-même n'est pas sous contrôle de version; en cours d' exécutiongit status
en/workingfiles/
donnera l'erreurfatal: Not a git repository (or any parent up to mount point /data)
. Ce ne sont que des fichiers simples.Contrairement à d'autres solutions, la
rm -r .git
commande n'est pas nécessaire, donc s'il/workingfiles/
y a un autre dépôt git, vous n'avez pas à vous soucier de la commande utilisée pour supprimer les fichiers git de l'autre dépôt.la source