web-dev-qa-db-fra.com

TortoiseGit: déplacer des fichiers vers un nouveau dossier n'est pas reconnu comme mot

J'essaie de déplacer des fichiers dans mon référentiel dans un nouveau dossier. Je veux que Git/TortoiseGit reconnaisse qu'il s'agit d'un déménagement au lieu d'une suppression et de plusieurs ajouts.
[.____] Comment puis-je faire ce travail? J'ai vérifié la documentation de TortoiseGit et j'ai recherché Google, mais cela ne semblait pas être très utile.

Donc, ce que j'ai est cette structure:

repo_root/somefile.txt

Ce que je veux:

repo_root/new_folder/somefile.txt

Bien sûr, "quelquefile.txt" représente tous les fichiers et dossiers déplacés.

9
Dries

Rappelez-vous une chose: Git Tracks Contenu uniquement.

De Fichiers mobiles Section de Pro Git Book v2:

Contrairement à de nombreux autres systèmes VCS, Git ne suit pas explicitement le mouvement des fichiers. Si vous renommez un fichier dans GIT, aucune métadonnée n'est stockée dans GIT qui lui indique que vous avez renommé le fichier. Cependant, Git est assez intelligent de comprendre cela après le fait

Et, bouger et renommer est la même chose dans Git.

Donc, git détecte le déménagement/renommée ne fonctionne automatiquement que dans le principe que ces fichiers ne sont pas modifiés .

Git fait ces choses lorsque vous déménagez/renommer le fichier uniquement:

  1. Un fichier de suivi est supprimé, Git obtient le SHA-1 de ce contenu de fichier, supposons que la valeur est abc.
  2. Un fichier maltrack est ajouté, GIT calcule le SHA-1 de ce contenu de fichier, suppose que la valeur est abc.
  3. Si vous vous engagez en ce moment, GIT déterminera qu'ils ont la même valeur SHA-1, puis les traiter comme une renommée.

Supposons que vous ayez modifié certains fichiers suivis et que vous les déplacez également dans un autre dossier. Ensuite, malheureusement, Git ne peut pas les détecter comme renommée/se déplaçant automatiquement lorsqu'il est commis.

Si vous voulez vraiment que Git Traconnette Renommer/Moving automatiquement, Vous devez faire :

Assurez-vous de ne pas modifier le (s) fichier (s) et seulement renommer/déplacer le (s) fichier (s) dans un commit


Si vous souhaitez modifier le fichier et déplacer le fichier en même temps, et que vous voulez que Git les détecte comme renommée/déménagement à l'aide de TortoiseGit, puis dans votre cas:

  1. Faites un clic droit sur ce fichier, puis cliquez sur TortoiseGit -> Rename... Objet du menu contextuel.
  2. préfixe new_folder\ au nom du fichier, voir: enter image description here
  3. s'engager

Remarque: vous devez renommer des fichiers un par un. Supposons beaucoup de travail à faire. Donc, mieux renommer le fichier seulement.

NOTE2: Si vous modifiez Bea Dans le fichier, GIT ne peut pas comprendre qu'il est renommé/déménagement.

14
Yue Lin Ho

De la Tortoisegit Documentation :

Si vous souhaitez déplacer des fichiers autour de votre arbre de travail, peut-être à un autre sous-dossier, vous pouvez utiliser le gestionnaire de glisser-goutte à droite de la souris:

A. Sélectionnez les fichiers ou les répertoires que vous souhaitez déplacer

B. Drive les au nouvel emplacement à l'intérieur de l'arbre de travail

C. Relâchez le bouton droit de la souris

D. Dans le menu contextuel Sélectionnez Menu contextuel → Git Déplacer des fichiers versionnés ici

3
Narvarth

Git va gérer cela à la fin de la fin de votre avis. Pendant que vous gérez les fichiers non engagés, il traitera initialement de la création et de la suppression comme des actions distinctes, mais après votre commettre, il tentera de résoudre les suppressions avec création pour voir s'il s'agissait d'un geste de fichier. Vous pouvez voir cela par vous-même dans le journal de validation avec "Old File ==> Nouveaux fichiers" lorsque Git trouve un geste de fichier.

Sinon, vous pouvez utiliser Git MV si cela vous fait sentir plus sûr https://git-scm.com/docs/git-mv

1
Mike Gonzales