Une branche ( refactoringBranch
) a fait l'objet d'une restructuration complète de son répertoire. Les fichiers ont été déplacés de façon désordonnée, mais le contenu a été préservé.
J'ai essayé de fusionner : git merge --no-ff -Xrename-threshold=15 -Xpatience -Xignore-space-change refactoringBranch
git status montre une reconnaissance du renommage d'environ la moitié des fichiers. Mais sur les 10000 fichiers du projet, la moitié n'a pas été reconnue comme déplacée.
Un exemple serait :
# On branch master
# Changes to be committed:
# deleted: 404.php
# new file: public_html/404.php
...
# deleted: AnotherFile.php
# new file: public_html/AnotherFile.php
...
# renamed: contracts/css/view.css -> public_html/contracts/css/view.css
Des suggestions ?
Préhistoire
Le remaniement a été effectué en dehors de git. J'ai fait ce qui suit :
- Créé le
refactoringBranch
provenant demaster
. - Déposé la structure modifiée à l'intérieur de la
refactoringBranch
ce qui signifie que j'avais mes changements dans un autre répertoire et que je les ai simplement copiés-collés sur mon dépôt git. - J'ai tout ajouté et validé, puis j'ai essayé de fusionner.
C'est ce que j'ai fait :
git checkout -b refactoringBranch
cp -R other/place/* ./
git add . -A
git commit -a -m "blabla"
git checkout master
git merge --no-ff -Xrename-threshold=15 -Xpatience -Xignore-space-change refactoringBranch
Le problème se pose sur le git add . -A
étape probablement. Parce que si la détection des renommages est correcte ici, je suppose que la fusion se fera sans problème.
0 votes
J'ai vérifié, à l'aide d'un outil externe, la similitude entre
404.php
enmaster
etpublic_html/404.php
surrefactoringBranch
semblait être95.37%
.1 votes
De quel outil externe s'agit-il ? Avez-vous testé différents seuils de renommage avec quelque chose comme
git diff -M90% --stat master refactoringBranch
(en essayant avec différentes valeurs au lieu de 90%) ?0 votes
L'outil a été
php.net/similar_text
. Dans ma commande de fusion, j'utilise un seuil aussi bas que 15 %. Je m'attendrais à ce qu'elle soit acceptée.0 votes
Ce flux de travail suggère que master est également votre base de fusion. Est-ce exact ?
0 votes
Correct. Je fusionne
refactoringBranch
enmaster
. J'ai également essayé degit diff -M90%
et d'autres valeurs. Il détecte à peu près que404.php
a85
différence de caractères, sur 4141 en une seule foismaster
et4226
dans l'autre branche.0 votes
Vous n'avez donc pas modifié le master ? Qu'attendez-vous de la fusion, alors ?
1 votes
Laissez-nous poursuivre cette discussion dans le chat
0 votes
Git rm --cached nom_du_fichier_ancien ; (renommer le fichier) ; git add nom_du_fichier_nouveau a également fonctionné.