Question Comment puis-je cloner dans un répertoire non vide?


J'ai le répertoire A avec les fichiers correspondant au répertoire B. Le répertoire A peut avoir d'autres fichiers nécessaires. Le répertoire B est un repo git.

Je veux cloner le répertoire B dans le répertoire A mais git-clone ne me le permet pas car le répertoire n'est pas vide.

J'espérais que ce serait cloner .git et puisque tous les fichiers correspondent je pourrais aller de là?

Je ne peux pas cloner dans un répertoire vide parce que j'ai des fichiers dans le répertoire A qui ne sont pas dans le répertoire B et que je veux les garder.

Copier .git n'est pas une option car je veux refs pousser / tirer avec et je ne veux pas les configurer manuellement.

Est-ce qu'il y a un moyen de faire ça?

Mise à jour: Je pense que cela fonctionne, quelqu'un peut-il voir des problèmes? ->

cd a
git clone --no-hardlinks --no-checkout ../b a.tmp 
mv a.tmp/.git .
rm -rf a.tmp
git unstage # apparently git thinks all the files are deleted if you don't do this

462
2018-03-09 17:23


origine


Réponses:


Cela a fonctionné pour moi:

git init
git remote add origin PATH/TO/REPO
git fetch
git reset origin/master  # this is required if files in the non-empty directory are in the repo
git checkout -t origin/master

REMARQUE:  -t mettra la branche en amont pour vous, si c'est ce que vous voulez, et c'est généralement le cas.


591
2017-09-25 08:20



Dans les commandes shell suivantes existing-dir est un répertoire dont le contenu correspond aux fichiers suivis dans le repo-to-clone git repository.

# Clone just the repository's .git folder (excluding files as they are already in
# `existing-dir`) into an empty temporary directory
git clone --no-checkout repo-to-clone existing-dir/existing-dir.tmp # might want --no-hardlinks for cloning local repo

# Move the .git folder to the directory with the files.
# This makes `existing-dir` a git repo.
mv existing-dir/existing-dir.tmp/.git existing-dir/

# Delete the temporary directory
rmdir existing-dir/existing-dir.tmp
cd existing-dir

# git thinks all files are deleted, this reverts the state of the repo to HEAD.
# WARNING: any local changes to the files will be lost.
git reset --hard HEAD

136
2018-03-20 19:10



Une légère modification à l'une des réponses qui a fonctionné pour moi:

git init
git remote add origin PATH/TO/REPO
git pull origin master

pour commencer à travailler sur la branche principale immédiatement.


78
2018-03-16 13:28



Voici ce que j'ai fini par faire quand j'ai eu le même problème (au moins je pense que c'est le même problème). Je suis allé dans le répertoire A et j'ai couru git init.

Comme je ne voulais pas que les fichiers du répertoire A soient suivis par git, j'ai édité .gitignore et ajouté les fichiers existants. Après ça j'ai couru git remote add origin '<url>' && git pull origin master et voíla, B est "cloné" en A sans un seul hoquet.


24
2018-01-20 18:00



git init 

git remote add origin PATH/TO/REPO 

git fetch 

git checkout -t origin/master -f

Modifié à partir de la réponse de @ cmcginty - sans le -f, cela n'a pas fonctionné pour moi


12
2018-04-07 22:08



Cela a fonctionné pour moi:

cd existing_folder
git init
git remote add origin path_to_your_repo.git
git add .
git commit
git push -u origin master

9
2017-08-22 01:45



Une autre recette simple semble bien fonctionner pour moi:

git clone --bare $URL .git
git config core.bare false

Mon principal cas d'utilisation pour vérifier dans un répertoire avec des fichiers existants est de contrôler mes fichiers de points Unix avec Git. Sur un nouveau compte, le répertoire personnel contient déjà des fichiers, peut-être même ceux que je veux obtenir de Git.


7
2018-01-27 21:55