commande - git tag




commande git pour déplacer un dossier dans un autre (6)

L'une des plus belles choses à propos de git est que vous n'avez pas besoin de suivre les renames de fichiers explicitement. Git va le comprendre en comparant le contenu des fichiers.

Donc, dans votre cas, ne travaillez pas si fort:

$ mkdir include
$ mv common include
$ git rm -r common
$ git add include/common

L'exécution du git status devrait vous montrer quelque chose comme ceci:

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   renamed:    common/file.txt -> include/common/file.txt
#

J'ai créé un dossier common avec un tas de fichiers et dossiers source.

Maintenant, je veux déplacer le dossier common dans le dossier include afin qu'il ressemble à include/common

J'ai essayé ceux-ci:

  1. git add include

  2. git mv common/ include/

    mais il échoue avec cette erreur

    fatale: mauvaise source, source = myrepo / commun, destination = myrepo / include

  3. J'ai essayé git mv commun / include / common mais j'ai la même erreur

Une idée de comment y parvenir?


J'ai eu un problème similaire, mais dans le dossier que je voulais déplacer j'avais des fichiers que je ne suivais pas.

disons que j'avais des fichiers

a/file1
a/untracked1
b/file2
b/untracked2

Et je voulais déplacer uniquement les fichiers suivis dans le sous-dossier subdir , donc l'objectif était:

subdir/a/file1
subdir/a/untracked1
subdir/b/file2
subdir/b/untracked2

ce que j'avais fait était:

  • J'ai créé un nouveau dossier et déplacé tous les fichiers que je voulais déplacer: mkdir tmpdir && mv ab tmpdir
  • vérifié les anciens fichiers git checkout ab
  • créé un nouveau répertoire et déplacé les dossiers propres (sans les fichiers non supprimés) vers un nouveau sous-répertoire: mkdir subdir && mv ab subdir
  • ajout de tous les fichiers de subdir (donc Git ne pouvait ajouter que des fichiers précédemment suivis - c'était un peu git add --update avec un truc de changement de répertoire): git add subdir (normalement cela ajouterait même des fichiers non suivis - cela nécessiterait de créer .gitignore fichier .gitignore )
  • git status montre maintenant seulement les fichiers déplacés
  • déplacé le reste des fichiers de tmpdir vers subdir: mv tmpdir/* subdir
  • git status ressemble à nous avons exécuté git mv :)

Je suis désolé je n'ai pas assez de réputation pour commenter la "réponse" de "Andres Jaan Tack".

Je pense que mon messege va être supprimé ((Mais je veux juste avertir "lurscher" et d'autres qui ont eu la même erreur: faites attention

$ mkdir include
$ mv common include
$ git rm -r common
$ git add include/common

Il se peut que vous ne voyiez pas l'historique git de votre projet dans un nouveau dossier.

j'ai essayé

$ git mv oldFolderName newFolderName

eu

fatal: bad source, source=oldFolderName/somepath/__init__.py, dest
ination=ESWProj_Base/ESWProj_DebugControlsMenu/somepath/__init__.py

J'ai fait

git rm -r oldFolderName

et

git add newFolderName

et je ne vois pas l'histoire de vieux git dans mon projet. Au moins, mon projet n'est pas perdu. Maintenant, j'ai mon projet dans newFolderName, mais sans l'historique (

Je veux juste vous avertir, soyez prudent en utilisant les conseils de "Andres Jaan Tack", si vous ne voulez pas perdre votre git hsitory.


Commander:

$ git mv oldFolderName newFolderName

Cela fonctionne habituellement bien.

Erreur "mauvaise source ..." indique généralement qu'après la dernière validation il y avait des renames dans le répertoire source et donc git mv ne peut pas trouver le fichier attendu.

La solution est simple - il suffit de valider avant d'appliquer git mv .


Assurez-vous d'avoir ajouté toutes vos modifications à la zone de transit avant de l'exécuter

git mv oldFolderName newFoldername

git échoue avec erreur

fatal: bad source, source=oldFolderName/somepath/somefile.foo, destination=newFolderName/somepath/somefile.foo

s'il y a des fichiers non rajoutés, alors je viens de le découvrir.


J'ai eu un problème similaire avec git mv où je voulais déplacer le contenu d'un dossier dans un dossier existant, et j'ai fini avec ce script "simple":

pushd common; for f in $(git ls-files); do newdir="../include/$(dirname $f)"; mkdir -p $newdir; git mv $f $newdir/$(basename "$f"); done; popd

Explication

  • git ls-files : Trouver tous les fichiers (dans le dossier common ) cochés dans git
  • newdir="../include/$(dirname $f)"; mkdir -p $newdir; : Créer un nouveau dossier dans le dossier include , avec la même structure de répertoire que common
  • git mv $f $newdir/$(basename "$f") : Déplace le fichier dans le dossier nouvellement créé

La raison pour cela est que git semble avoir des problèmes à déplacer des fichiers dans des dossiers existants, et il échouera également si vous essayez de déplacer un fichier dans un dossier mkdir -p (d'où mkdir -p ).

La bonne chose à propos de cette approche est qu'elle ne touche que les fichiers qui sont déjà enregistrés dans git. En utilisant simplement git mv pour déplacer un dossier entier, et le dossier contient des changements non statiques, git ne saura pas quoi faire.

Après avoir déplacé les fichiers, vous pouvez nettoyer le référentiel pour supprimer tous les changements non stockés restants.

git clean -fd -n




git