Comment pouvez-vous append un nouveau fichier sans le mettre en scène?

Pour utiliser git efficacement (et comme prévu) je fais de petits commits atomiques, alors que j’ai des sessions plus longues où je ne change pas une seule chose. Ainsi, je fais un usage git add -p de git add -p . Cela ne fonctionne pas pour les fichiers complètement nouveaux, car j’ai tendance à les oublier plus tard.

Ce que je veux faire, c’est dire à git qu’il y a un nouveau fichier, je veux le suivre, mais pas le mettre en scène :

Exemple: En cours d’exécution, git status produit:

 # On branch my-current-branch # Your branch is ahead of 'origin/my-current-branch' by 2 commits. # # Changes to be committed: # <> // A # # Changes not staged for commit: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # <> // B # # Untracked files: # (use "git add ..." to include in what will be committed) # <> // C 

Si j’ai un fichier foo dans la section C et que je dis git add foo il ira dans la section A. Si je dis git add -N foo il ira à la fois à A et à B. Cependant, cela voudrait dire qu’il serait inclus dans le prochain commit, du moins comme il y a un nouveau fichier.

Je veux qu’il aille dans la section B exclusivement, de sorte que je puisse l’append plus tard à A avec git add -p ou git add foo (ou autre).

modifier

En ce qui concerne la solution add -N , cela ne fonctionne pas car si j’essaie de valider après avoir dit add -N et ne pas l’ avoir ajouté correctement, git se plaint car il ne sait pas gérer les fichiers vides:

 foo: not added yet error: Error building trees 

    Avec Git 2.5, git add -N/--intent-to-add est en fait la bonne solution.
    Le nouveau fichier ne fera pas partie du prochain commit.

    Voir commit d95d728 par Nguyễn Thái Ngọc Duy ( pclouds ) (fusionné dans d0c692263 ):

    diff-lib.c : ajuste la position de ses entrées dans diff

    Problème:

    Les entrées ajoutées par ” git add -N ” sont un rappel pour l’utilisateur afin qu’elles n’oublient pas de les append avant de valider. Ces entrées apparaissent dans l’index même si elles ne sont pas réelles. Leur présence dans l’index conduit à un ” git status ” confus comme ceci:

     On branch master Changes to be committed: new file: foo Changes not staged for commit: modified: foo 

    Si vous faites un ” git commit “, ” foo ” ne sera pas inclus, même si ” status ” le signale ” to be committed “.

    Solution:

    Ce patch modifie la sortie pour devenir

     On branch master Changes not staged for commit: new file: foo no changes added to commit 

    Cela signifie:

    Traitez ces chemins comme “à append à l’index mais Git les connaît déjà”; ” git diff HEAD ” et ” git diff --cached HEAD ” ne devraient pas en parler, et ” git diff ” devrait les montrer comme nouveaux. + fichiers à append à l’index.

    Peut-être que vous pourriez essayer d’écrire un hook pré-validation qui vous avertit si vous avez des fichiers non suivis. Cela vous obligera à toujours garder votre répertoire git propre au travail (et vous aurez évidemment besoin de garder un fichier .gitignore à jour).

    Essayez également git add -i qui est similaire à git add -p mais qui possède également une interface pour append de nouveaux fichiers.

    Vous pouvez valider un fichier vide avec ce chemin avant d’effectuer vos modifications. Si vous avez déjà écrit des choses là-bas, éloignez le fichier, créez un fichier vierge, validez-le, puis ajoutez -p comme normal et git commit --amend pour ne pas avoir de git commit --amend “Ajouter un fichier vide”.