web-dev-qa-db-fra.com

'git add --patch' pour inclure de nouveaux fichiers?

Quand je lance git add -p, y a-t-il un moyen pour git de sélectionner des fichiers nouvellement créés en tant que mecs pour sélectionner ??

Donc, si je crée un nouveau fichier appelé foo.Java, puis exécutez git add -p, git ne me laissera pas choisir le contenu de ce fichier à ajouter à l'index.

88
Alexander Bird

Pour ce faire avec chaque nouveau fichier, vous pouvez exécuter:

git add -N .
git add -p

Si vous souhaitez l'utiliser fréquemment, vous pouvez créer un alias dans votre ~/.bashrc:

alias gapan='git add --intent-to-add . && git add --patch'

N.B: Si vous l'utilisez avec un nouveau fichier vide, git ne pourra pas le patcher et passer au suivant.

48
Ulysse BN

Quand j'ai essayé git add -p someNewFile.txt sur un nouveau fichier (un fichier non suivi), git afficherait simplement No changes. et arrêtez. J'ai dû dire à git que j'avais l'intention de suivre le nouveau fichier en premier.

git add -N someNewFile.txt
git add -p

Cependant, comme le fichier n'était pas suivi, il apparaîtrait comme un gros morceau géant qui ne pouvait pas être divisé (car il est tout nouveau!). Alors, j'avais besoin d'éditer le morceau en petits morceaux. Si vous n'êtes pas familier avec cela, passez à la caisse cette référence pour commencer.

Mise à jour - Informations de modification de morceau Je voulais mettre à jour cela au cas où la référence ci-dessus disparaîtrait. Parce que le le nouveau fichier n'est pas suivi, git add -p affichera chaque ligne du fichier comme une nouvelle ligne dans un morceau. Il vous demandera ensuite ce que vous voulez faire avec ce morceau, vous donnant l'invite suivante:

Stage this hunk [y,n,q,a,d,/,e,?]?

En supposant que vous ne vouliez pas valider le morceau entier (et donc le fichier entier; parce que je ne sais pas pourquoi vous voudriez utiliser git add -p dans ce cas?), vous voudrez spécifier l'option e pour dire à git que vous voulez éditer le morceau.

Une fois que vous avez dit à git que vous souhaitez modifier le morceau, il devrait vous déposer dans l'éditeur de votre choix afin que vous puissiez apporter vos modifications. Toutes les lignes doivent être préfixées par un + et git a quelques commentaires explicatifs (précédés d'un #) à la fin du fichier. Supprimez simplement toutes les lignes dont vous ne voulez pas dans votre validation initiale du fichier. Enregistrez puis quittez l'éditeur.

Explication de Git des options de morceau de git:

y - stage this hunk
n - do not stage this hunk
q - quit; do not stage this hunk or any of the remaining ones
a - stage this hunk and all later hunks in the file
d - do not stage this hunk or any of the later hunks in the file
g - select a hunk to go to
/ - search for a hunk matching the given regex
j - leave this hunk undecided, see next undecided hunk
J - leave this hunk undecided, see next hunk
k - leave this hunk undecided, see previous undecided hunk
K - leave this hunk undecided, see previous hunk
s - split the current hunk into smaller hunks
e - manually edit the current hunk
? - print help
104
CatShoes

git add -p consiste vraiment à ajouter des modifications aux fichiers déjà suivis.

La commande de sélection interactive des fichiers à ajouter est git add -i. Par exemple:

$ git add -i

*** Commands ***
  1: status   2: update   3: revert   4: add untracked
  5: patch    6: diff     7: quit     8: help
What now> a
  1: another-new.Java
  2: new.Java
Add untracked>> 2
  1: another-new.Java
* 2: new.Java
Add untracked>> 
added one path

*** Commands ***
  1: status   2: update   3: revert   4: add untracked
  5: patch    6: diff     7: quit     8: help
What now> q
Bye.
$ git status
On branch master
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        new file:   new.Java

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        another-new.Java

(La vraie commande a des couleurs que je ne pouvais pas couper-coller ici, donc c'est plus agréable qu'il n'y paraît)

En fait, la commande p atch de git add -i fait la même chose que git add -p, donc le second est un sous-ensemble du premier (même si j'avoue que j'aime add -p et la haine add -i moi même!).

3
Matthieu Moy

Il existe également une approche très similaire utilisant le --cached drapeau...

1) Transformez vos modifications non mises en scène en mises en scène, tout comme votre fichier ajouté.

git add edited-file.txt
git add new-file.txt
git add directory-of-changes/

2) Regardez le diff (remarque: vous pouvez inclure à la fois des modifications et de nouveaux fichiers).

git diff --cached

3) Créez le patch.

git diff --cached > my_patch_file.patch
2
doublejosh