3119 votes

Comment cloner un dépôt Git dans un dossier spécifique ?

Exécution de la commande git clone git@github.com:whatever crée un répertoire dans mon dossier courant nommé whatever et dépose le contenu du dépôt Git dans ce dossier :

/httpdocs/whatever/public

Mon problème est que j'ai besoin que le contenu du dépôt Git soit cloné dans mon répertoire actuel afin qu'il apparaisse à l'emplacement approprié pour le serveur web :

/httpdocs/public

Je sais comment déplacer les fichiers après avoir cloné le référentiel, mais cela semble casser Git, et j'aimerais pouvoir mettre à jour simplement en appelant git pull . Comment puis-je faire ?

7 votes

Sous Windows, vous pouvez déplacer les fichiers du dossier où vous allez cloner le repo [s'il y en a un] afin qu'il soit vide lorsque vous faites clone git . Après le clonage, déplacez vos fichiers en arrière [ctrl-z] et whoala ! Si le dossier courant est vide, utilisez simplement : git clone giturl .

68 votes

voila est l'orthographe

145 votes

@MatthiasDailey voilà est le réel orthographe

4397voto

Can Berk Güder Points 39887

Option A :

git clone git@github.com:whatever folder-name

Ergo, pour right here utiliser :

git clone git@github.com:whatever .

Option B :

Déplacez le .git dossier, aussi. Notez que le .git est caché dans la plupart des explorateurs de fichiers graphiques, assurez-vous donc d'afficher les fichiers cachés.

mv /where/it/is/right/now/* /where/I/want/it/
mv /where/it/is/right/now/.* /where/I/want/it/

La première ligne saisit tous les fichiers normaux, la deuxième ligne saisit les fichiers à points. Il est également possible de le faire en une seule ligne en activant dotglob (i.e. shopt -s dotglob ) mais c'est probablement une mauvaise solution si vous posez la question à laquelle cette réponse répond.

Encore mieux :

Conservez votre copie de travail ailleurs, et créez un lien symbolique. Comme ceci :

ln -s /where/it/is/right/now /the/path/I/want/to/use

Dans votre cas, ce serait quelque chose comme :

ln -sfn /opt/projectA/prod/public /httpdocs/public

Ce qui pourrait facilement être changé en test si vous le vouliez, c'est-à-dire :

ln -sfn /opt/projectA/test/public /httpdocs/public

sans déplacer les fichiers. Ajouté -fn au cas où quelqu'un copierait ces lignes ( -f est la force, -n éviter certaines interactions souvent indésirables avec des liens déjà existants ou non).

Si vous voulez simplement que ça marche, utilisez l'option A. Si quelqu'un d'autre doit regarder ce que vous avez fait, utilisez l'option C.

16 votes

Je n'avais pas pensé à votre option "Mieux encore", et je l'aime bien, même si je ne sais pas trop pourquoi. Quels sont les avantages de cette option ?

9 votes

Cela ne présente probablement aucun avantage pour l'instant, mais cela pourrait vous éviter bien des soucis si vous décidez un jour de déplacer des objets.

0 votes

J'essaie la méthode du lien symbolique, mais je ne suis pas sûr que cela fonctionne avec Django ?

656voto

J Wynia Points 4679

L'exemple que je pense que beaucoup de personnes posant cette question recherchent est le suivant. Si vous êtes sur le répertoire dans lequel vous voulez que le contenu du dépôt git soit vidé, exécutez :

git clone git@github.com:whatever .

Le "." à la fin spécifie le dossier actuel comme dossier de sortie.

36 votes

True, donc vous ne voulez pas lancer "git init" dans ce dossier avant de le cloner. Mais si vous l'avez fait, la suppression du dossier .git avant le clonage fera l'affaire.

5 votes

Corrigé pour les répertoires vides dans ma réponse

3 votes

Je n'ai pas réussi à faire fonctionner ce système dans nitrous.io ? même après avoir vidé le répertoire, il dit qu'il n'est pas vide.

267voto

csomakk Points 1279

Allez dans le dossier Si le dossier est vide, alors :

git clone git@github.com:whatever .

sinon

git init
git remote add origin PATH/TO/REPO
git fetch
git checkout -t origin/master

10 votes

En fait, c'était la réponse la plus utile pour moi quand j'avais juste besoin de pousser un projet déjà créé vers un dépôt nouvellement créé. Félicitations !

16 votes

Seule réponse qui précise comment procéder à l'extraction dans un dossier non vide, merci.

3 votes

C'est vraiment utile car le switch -t on n'est pas clairement indiqué sur la documentation de git checkout .

121voto

Craig Gjerdingen Points 350

Clonage de base d'un dépôt Git

Vous clonez un référentiel avec

git clone [url]

Par exemple, si vous souhaitez cloner la bibliothèque Git Drupal Open Framework de l'université de Stanford, appelée open_framework, vous pouvez procéder comme suit :

$ git clone git://github.com/SU-SWS/open_framework.git

Cela crée un répertoire nommé open_framework (à l'emplacement actuel de votre système de fichiers local), initialise un répertoire .git à l'intérieur, extrait toutes les données de ce dépôt et extrait une copie de travail de la dernière version. Si vous allez dans le répertoire open_framework nouvellement créé, vous y verrez les fichiers du projet, prêts à être travaillés ou utilisés.

Cloner un référentiel dans un dossier local spécifique

Si vous voulez cloner le référentiel dans un répertoire nommé autrement qu'open_framework, vous pouvez le spécifier comme l'option suivante de la ligne de commande :

$ git clone git:github.com/SU-SWS/open_framework.git mynewtheme

Cette commande fait la même chose que la précédente, mais le répertoire cible s'appelle mynewtheme.

Git dispose d'un certain nombre de protocoles de transfert différents que vous pouvez utiliser. L'exemple précédent utilise le protocole git://, mais vous pouvez également voir http(s):// ou user@server:/path.git, qui utilise le protocole de transfert SSH.

0 votes

Cela créera automatiquement un dossier dans votre dossier actuel et y placera les fichiers. Ainsi, vous n'avez pas à vous soucier de l'écrasement d'un autre dossier.

19voto

Paul Points 12977

Lorsque vous déplacez les fichiers vers l'endroit où vous voulez les mettre, est-ce que vous déplacez aussi les .git répertoire ? En fonction de votre système d'exploitation et de votre configuration, ce répertoire peut être caché.

Il contient le dépôt et les fichiers d'accompagnement, tandis que les fichiers du projet qui se trouvent dans votre fichier /public sont uniquement les versions du commit en cours de check-out (branche master par défaut).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X