Le déplacement d'un dépôt git un niveau de la hiérarchie
Git question de débutant:
J'ai une petite salle de webproject qui est versionné localement avec msysgit. Il n'y a pas d'extérieur, espace de stockage, comme c'est seulement pour moi, afin que je puisse bascially faire ce que je veux.
J'ai eu ce jeu dans le répertoire du projet, c'est à dire dans "racine".
Maintenant un deuxième répertoire devait être créé, placée parallèlement à la racine de votre site. Appelons ça de l'actif.
Si la structure est maintenant comme suit:
\ project directory
----\webroot
----\assets
J'aimerais inclure ce nouveau répertoire dans le répertoire git, alors que j'avais aussi des changements de version pour les fichiers qui y sont stockés, mais bien sûr je ne peux pas utiliser "git add ../actifs". Je ne suis enclin à créer un nouveau projet git dans project_directory, ce qui permettrait de perdre tous mes précédents s'engage.
Alors, comment dois-je aller sur le déplacement du référentiel de "racine" en "project_directory", tout en gardant ma s'engage et puis d'être en mesure d'inclure les "actifs"?
- pas exactement ce que vous demandez, mais vous pouvez créer une branche ajouter des actifs en elle.
Vous devez vous connecter pour publier un commentaire.
Donc, vous voulez que votre repo git pour ressembler à ceci:
Pour ce faire, vous devez déplacer les fichiers existants dans votre pension dans une nouvelle
webroot
sous-répertoire.Ensuite, sur votre système de fichiers local vous voulez déménager votre cloner un répertoire ci-dessus où il est maintenant:
Ensuite, vous voulez pour ajouter les
assets
répertoire (fichiers) à la repo git:mv webroot/.* .
ainsi, afin de déplacer le repo et .gitignore fichiers.git mv * webroot
ne fonctionnera pas parce que bash générique * sera également substitued avec webroot, la prise de la commandegit mv webroot webroot
. Git va échouer à l'. L'autre dossier qu'il avait des problèmes avec .git. J'ai donc dû utiliser des bash env variableGLOBIGNORE=webroot:.git
de sorte que * ne pas être substitued avec ces deux répertoires. Grâce à qui je n'avais pas à faire des dizaines de manuel git mv - mon annuaire a beaucoup de dossiers et de fichiers. Je n'avais qu'à déplacer l' .git dossier manuellement.rmdir
? Ne paswebroot
contenir tous les fichiers que vous voulez garder-ils suivis?Vous pouvez aussi déplacer votre .git dir monter d'un niveau et mise à jour de votre worktree.
Pas positif, mais je suis sûr que le chemin d'accès de base.worktree doit être absolue.
mv .git / ../
Je suppose que vous vouliez dire à réécrire l'histoire pour contenir tous les fichiers de toutes les révisions comme si elles avaient toujours été dans un sous-répertoire webroot/au lieu de la racine
Le git filter-branch page de manuel a la réponse, ici, une version améliorée qui réécrit toutes les refs (les branches) et tags:
Soin a été pris pour faire ce un indice de la seule opération, de sorte que le processus est exécuté rapide, même pour les gros titres. N'oubliez pas de (lorsque vous êtes satisfait) de se débarrasser de l'original refs (.git/refs/original/*) et de remballer les pensions de perdre la désuet des objets de l'arborescence.
Vos commits ne sont pas localement liée à la "racine" du dossier, ils sont stockés dans le repo git.
Vous pouvez simplement supprimer le répertoire webroot recheckout le référentiel dans le nouvel emplacement "/répertoire du projet" ajouter le répertoire actif et de s'engager.
La commande suivante serait de réécrire votre historique de Git. Il serait comme si le contenu était en
webroot
tout au long de. Généralement réécriture de l'histoire est gênant si plusieurs personnes travaillent avec un repo. Puisque vous travaillez seul, il doit être fine.