J'ai le répertoire A avec des fichiers correspondant au répertoire B. Le répertoire A peut avoir d'autres fichiers nécessaires. Le répertoire B est un dépôt git.
Je veux cloner le répertoire B dans le répertoire A mais git-clone ne me le permettra pas car le répertoire n'est pas vide.
J'espérais qu'il clonerait juste .git et puisque tous les fichiers correspondent, je pourrais y aller?
Je ne peux pas cloner dans un répertoire vide car j'ai des fichiers dans le répertoire A qui ne sont pas dans le répertoire B et je veux les conserver.
Copier .git n'est pas une option car je veux que les refs poussent / tirent avec et je ne veux pas les configurer manuellement.
Y a-t-il 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
Réponses:
Cela a fonctionné pour moi:
REMARQUE:
-t
définira la branche en amont pour vous, si c'est ce que vous voulez, et c'est généralement le cas.la source
git reset origin/master
aprèsgit fetch
, cela fonctionnera (en préservant également les modifications locales).git checkout ...
git se plaint que tous mes fichiers seraient écrasés et que je devrais les déplacer en premier. Quand je fais `git reset origin / master /` tout d'abord, la commande checkout se plaint qu'une branche nommée master existe déjà.git checkout master
était une étape finale suffisante pour moi.fatal: A branch named 'master' already exists
. Je pense que je n'en avais pas vraiment besoin.Dans les commandes shell suivantes se
existing-dir
trouve un répertoire dont le contenu correspond aux fichiers suivis dans lerepo-to-clone
référentiel git.la source
git reset --hard HEAD
ou cela n'abandonnerait pas les fichiers "supprimés".git reset HEAD
a bien fonctionné pour moi.git reset --hard HEAD
détruit tous les changements dans vos fichiers, donc s'ils ne sont pas exactement les mêmes que les fichiers dans le référentiel, vous ne devriez pas le faire.git reset HEAD
ne semble pas avoir d'effet sur moi.git reset --hard HEAD
- mais cela perd toutes les modifications que vous avez apportées aux fichiers. Y a-t-il une meilleure solution?Une légère modification à l'une des réponses qui a fonctionné pour moi:
pour commencer immédiatement à travailler sur la branche principale.
la source
git branch --set-upstream-to=origin/master master
.Avertissement - cela pourrait potentiellement écraser les fichiers.
Modifié à partir de la réponse de @ cmcginty - sans le -f, cela n'a pas fonctionné pour moi
la source
git checkout .
?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 de git, j'ai édité .gitignore et y ai ajouté les fichiers existants. Après cela, j'ai couru
git remote add origin '<url>' && git pull origin master
et voíla, B est "cloné" dans A sans un seul hoquet.la source
Je l'ai utilisé il y a quelques instants, nécessite les commandes les moins potentiellement destructrices:
Et voilá!
la source
Une autre recette simple semble bien fonctionner pour moi:
Mon principal cas d'utilisation pour extraire un répertoire avec des fichiers existants est de contrôler mes fichiers dot Unix avec Git. Sur un nouveau compte, le répertoire personnel contient déjà certains fichiers, peut-être même ceux que je souhaite obtenir de Git.
la source
.git/config
fichier indique que le référentiel est nu. 2.) Les fichiers normalement stockés dans.git
sont stockés à la racine (que vous avez appelée.git
).git
et la misecore.bare
àfalse
se prendre en charge, donc je me sens encore bien dans cette méthode.Cela a fonctionné pour moi:
la source
J'ai eu un problème similaire avec un nouveau répertoire Web Apache (compte créé avec WHM) que je prévoyais d'utiliser comme serveur Web intermédiaire. J'avais initialement besoin de cloner mon nouveau projet avec la base de code là-bas et de déployer périodiquement les modifications en tirant du référentiel.
Le problème était que le compte contenait déjà des fichiers de serveur Web comme:
... que je ne voulais ni supprimer ni valider mon référentiel. J'avais besoin d'eux pour rester là sans mise en scène et sans suivi.
Ce que j'ai fait:
Je suis allé dans mon dossier Web (dossier_existant):
et alors:
Il a affiché (comme prévu) une liste de nombreux fichiers non intermédiaires - ceux qui existaient déjà au départ de mon compte Web cPanel.
Ensuite, grâce à cet article , je viens d'ajouter la liste de ces fichiers à:
Ce fichier, presque comme le
.gitignore
fichier, vous permet d'ignorer les fichiers d'être mis en scène. Après cela, je n'avais plus rien à valider dans le répertoire .git / - cela fonctionne comme un.gitignore
que personne d'autre ne peut voir.Vérification des
git status
retours:Maintenant, je peux déployer des modifications sur ce serveur Web en tirant simplement de mon référentiel git. J'espère que cela aidera certains développeurs Web à créer facilement un serveur de transfert.
la source
Voici ce que je fais:
la source
Peut-être que j'ai mal compris votre question, mais ne serait-il pas plus simple si vous copiez / déplacez les fichiers de A vers le git repo B et ajoutez ceux nécessaires avec git add ?
MISE À JOUR: Du git doc:
SOURCE: http://git-scm.com/docs/git-clone
la source
Je cherchais quelque chose de similaire, et voici ce que j'ai trouvé:
Ma situation est celle où j'ai une arborescence Web active et j'essayais de créer un référentiel distant pour celle-ci sans déplacer aucun des fichiers de l'arborescence Web actuelle. Voici ce que j'ai fait:
git init
git clone --bare /path/to/web/repo
[remote "origin"]
section.[remote "origin"]
section à .git / config dans l'arborescence Web pointant vers le nouveau référentiel distant.la source
git clone --bare
ici est superflu et détourné. Pourquoi pas seulementgit remote add origin <URL>
en premier lieu?cela fonctionne pour moi , mais vous devez fusionner les fichiers du référentiel distant avec les fichiers locaux:
la source
J'ai aimé la réponse de Dale et j'ai également ajouté
La faible profondeur a évité beaucoup de commits de dev supplémentaires. La nouvelle branche nous a donné une bonne histoire visuelle qu'il y avait du nouveau code de ce serveur qui a été placé dedans. C'est la branche d'utilisation parfaite à mon avis. Merci à la grande perspicacité de toutes les personnes qui ont posté ici.
la source
J'ai les mêmes problèmes en essayant de cloner en c / code
Mais ce dossier contient tout un tas de projets.
J'ai créé un nouveau dossier dans c / code / newproject et mappé mon clone sur ce dossier.
git for desktop a ensuite demandé à mon utilisateur, puis cloné bien.
la source