web-dev-qa-db-fra.com

Comment obtenir que Git soit cloné dans le répertoire courant

Je fais:

git clone ssh://[email protected]/home/user/private/repos/project_hub.git ./

Je suis en train:

Fatal: chemin de destination '.' existe déjà et n'est pas un répertoire vide.

Je connais le chemin. existe déjà. Et je peux assurer que le répertoire IS est vide. (Je fais ls dedans et je ne vois rien!)

Qu'est-ce qui me manque ici pour pouvoir cloner ce projet dans le répertoire actuel?

431
MEM

Solution: Dans ce cas, la solution utilisait la dot, donc: rm -rf .* && git clone ssh://[email protected]/home/user/private/repos/project_hub.git .

rm -rf .* && peut être omis si nous sommes absolument sûrs que le répertoire est vide.

Les crédits vont à: @James McLaughlin sur les commentaires ci-dessous.

7
MEM

il suffit de mettre un point à côté

git clone [email protected]:user/my-project.git .

De git help clone:

Le clonage dans un répertoire existant n'est autorisé que s'il est vide.

Assurez-vous donc que le répertoire est vide (vérifiez avec ls -a), sinon la commande échouera.

452
Roshan Pal

Ce qui suit n'est probablement pas totalement équivalent à un clone dans tous les cas, mais a fait le tour pour moi:

git init .
git remote add -t \* -f Origin <repository-url>
git checkout master

Dans mon cas, cela produit un fichier .git/config qui équivaut à celui que je reçois lorsque je fais un clone.

327
Andre Holzner

@ Andrew a répondu clairement ici . Mais aussi simple que cela fonctionne, même si le répertoire n'est pas vide:

git init .
git remote add Origin <repository-url>
git pull Origin master
180
ambes

Pour être sûr de pouvoir cloner le référentiel, accédez à n’importe quel répertoire temporaire et clonez le projet à cet emplacement:

git clone ssh://[email protected]/home/user/private/repos/project_hub.git

Cela va cloner votre contenu dans un répertoire project_hub.

Une fois le clonage terminé, vous pouvez déplacer ce répertoire où vous voulez:

mv project_hub /path/to/new/location

Ceci est sûr et ne nécessite aucune substance magique autour.

59
eckes
git clone your-repo tmp && mv tmp/.git . && rm -rf tmp && git reset --hard
51
return1.at

Faire

git clone https://[email protected]/user/projectname.git .

Le répertoire doit être vide

28
KajeNick

Si le répertoire actuel est vide, cela fonctionnera:

git clone <repository> foo; mv foo/* foo/.git* .; rmdir foo
12
GoZoner

En plus de la réponse de @ StephaneDelcroix, avant d’utiliser:

git clone [email protected]/my-project.git .

assurez-vous que votre répertoire actuel est vide en utilisant

ls -a
10
Jakehao

Améliorer la réponse de @ GoZoner:

git clone <repository> foo; shopt -s dotglob nullglob; mv foo/* .; rmdir foo

La commande shopt provient de this SO answer et modifie le comportement de la commande 'mv' sur Bash afin d'inclure les fichiers de points, dont vous aurez besoin pour inclure le répertoire .git et tout autre fichier caché.

Notez également que cela n’est garanti que si le répertoire actuel (.) Est vide, mais cela fonctionnera aussi longtemps qu’aucun des fichiers du référentiel cloné n’aura le même nom que les fichiers du répertoire actuel. Si le contenu du répertoire actuel vous importe peu, vous pouvez ajouter l'option -f (force) à la commande 'mv'.

6
phatblat

J'ai eu le même besoin. Dans mon cas, j'avais un dossier Web standard créé par une installation de serveur Web. Aux fins de cette illustration, disons que ceci est

/server/webroot

et webroot contient d’autres fichiers et dossiers standard. Mon référentiel n'a que les fichiers spécifiques au site (html, javascript, CFML, etc.)

Tout ce que je devais faire était:

cd /server/webroot

git init

git pull [url to my repo.git]

Vous devez faire attention à faire git init dans le dossier cible car si vous ne le faites PAS, l’une des deux choses suivantes va se produire:

  1. Le git pull échouera simplement avec un message indiquant qu'il n'y a pas de fichier git, dans mon cas:

fatal: pas un dépôt git (ni aucun des répertoires parents): .git

  1. Si est un fichier .git quelque part dans le chemin parent de votre dossier, votre référentiel extrait sera créé dans CE parent qui contient le fichier .git. C'est ce qui m'est arrivé et j'ai été surpris par cela ;-)

Cela n'a perturbé aucun des fichiers "standard" que j'ai dans mon dossier webroot, mais j'ai eu besoin de les ajouter au fichier .gitignore pour empêcher leur ajout par inadvertance à des commits ultérieurs.

Cela semble être un moyen facile de "cloner" dans un répertoire non vide. Si vous ne voulez pas que les fichiers .git et .gitignore soient créés par le tirage, supprimez-les simplement après le tirage.

5
igeocacher

Hmm ... spécifier le chemin de courant absolu en utilisant $(pwd) a fonctionné pour moi.

git clone https://github.com/me/myproject.git $(pwd)

version git: 2.21.0

3
Nick Grealy

Améliorer encore le @ phatblat réponse :

git clone --no-checkout <repository> tmp \
  && mv tmp/.git . \
  && rmdir tmp \
  && git checkout master

comme une doublure:

git clone --no-checkout <repository> tmp && mv tmp/.git . && rmdir tmp && git checkout master

3
166_MMX
shopt -s dotglob
git clone ssh://[email protected]/home/user/private/repos/project_hub.git tmp && mv tmp/* . && rm -rf tmp
2
John Josef

utilisez. (point) à la fin de votre commande comme ci-dessous

git clone URL.

1
Upendra

Enlever avec

rm -rf. *

peut vous causer des ennuis ou des erreurs supplémentaires.

Si vous avez/path/to/folder et souhaitez supprimer tout ce qui se trouve à l'intérieur, mais pas ce dossier, exécutez simplement:

rm -rf/chemin/vers/dossier/*

1
Sid

J'ai donc corrigé cette erreur en supprimant le dossier .git caché dans mon répertoire racine, puis en ajoutant un point au "go clone repo". dans mon dossier racine/dist. C’est dans le cadre d’un projet vue-cli webpack. Donc ce que tout le monde dit est correct, cela signifie généralement que vous avez le suivi git soit dans le dossier dans lequel vous essayez de cloner, soit dans le dossier parent ou à la racine du dossier en question!

0
Akin Hwan

La solution pour Windows consiste à cloner le référentiel dans un autre dossier, puis à copier et coller vers l'emplacement d'origine ou simplement à copier le dossier .git invisible.

0
resizemyimg.com

Voici ce que j'ai trouvé:

Je vois ça:

fatal: destination path 'CouchPotatoServer' already exists and is not an empty directory.

Parmi mes recherches, je suis tombé sur:

https://couchpota.to/forum/viewtopic.php?t=394

Recherchez l'entrée de Clinton.Hall ... Si vous essayez ceci (comme je l'ai fait), vous obtiendrez probablement la réponse access denied, il y avait mon 1er indice, donc l'erreur initiale (pour moi) était en fait éluder à la mauvaise question racine.

Solution pour cela dans Windows: assurez-vous que vous exécutez cmd ou git elevated, puis exécutez:

git clone https://github.com/RuudBurger/CouchPotatoServer.git

Ce qui précède était mon problème et la simple élévation a fonctionné pour moi.

0
ynotjs

Supprimez (ou déplacez) simplement le contenu, y compris le répertoire .git, du répertoire donné.
Des outils automatisés tels que Android studio Rebuild résoudront le problème pour vous.

Plus de détails:
L'erreur montrée pour moi était pour jarresolver git repo
Le chemin indiqué est temp\jarresolver\

Je viens de supprimer le contenu du répertoire temp\jarresolver\, y compris le répertoire masqué .git.

C'est tout, tout a fonctionné, aucun clonage requis.
Quand j’ai fait Rebuild, Android le clonage du studio lui-même et sa construction ont été couronnés de succès.

0

il est utile de créer un nouveau fichier avec mkdir filename, puis d'exécuter la commande de git clone xxxxx, cela fonctionne sur mon ordinateur

0
crazier-qi