2010-12-28 16 views
3

Ich finde es sehr mühsam, vollständige Pfade zu schreiben, wenn Sie geänderte Dateien zum Index hinzufügen. Zum Beispiel habe ich drei Dateien geändert, will aber nur zwei von ihnen begehen:Hinzufügen von Elementen zu Git-Index effizient

# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: apps/frontend/config/modules/file1 
# modified: apps/frontend/config/modules/file2 
# modified: apps/frontend/config/modules/file3 

Also muß ich so viel geben wie:

git add app/frontend/modules/file1 app/frontend/modules/file3 

ich nach einem Weg suchen hinzufügen Einträge nach ihrem Index in der git Statusliste? So etwas wie

git add %1 %3 

Antwort

4

Verwenden interactive add:

git add -i 

Es wird Sie für jede Datei fragen, wenn Sie es dem Fest hinzufügen möchten.

können Sie noch weiter gehen und auf Basis von Patches holen, die immer nützlich ist:

git add -p 
1

Ich habe ein ähnliches Skript benutze ich nur 1 Datei hinzufügen schrieb, z.B. git nadd N, um die N-te modifizierte Datei hinzuzufügen. Es sollte nicht schwierig sein, es zu modifizieren, um mehrere Dateien zu erlauben.

#!/bin/bash 

if [[ $# != 1 ]] ; then 
    echo "usage: git nadd <index>" 
    exit 0 
fi 

num=$1 

# get unstaged modified files 
modified_files=$(git status --porcelain | grep " M " | cut -c 4-) 

if [[ $modified_files == "" ]] ; then 
    echo "error: there are no modified files" 
    exit 1 
fi 

# count how many we have 
num_modified_files=$(echo "$modified_files" | wc -l) 

if [[ $num -gt $num_modified_files ]] ; then 
    echo "error: index larger than number of modified files" 
    exit 2 
fi 

# pick n'th modified file 
file=$(echo "$modified_files" | sed -n "$num p") 

# fix $file to full path in case we're not in root 
root=$(git rev-parse --show-cdup) 
file=$root$file 

git add -- "$file" 
+0

Verwenden Sie ein Array: 'modified_files = ($ (...))', 'num_modified_files = $ {# modified_files [ @]} ',' file = $ {modifizierte_Dateien [num]} '. Sie können auch 'if ((num> num_modified_files))' 'machen. –

2
cd apps/frontend/config/modules 
git add file1 file3 
cd - #go back 
+0

Beachten Sie, dass "cd -" Shell-spezifisch ist. (dh es wird nicht in allen Shells funktionieren) –

+0

@WilliamPursell 'cd -' ist in POSIX. Oh, Csh? Nun, benutze 'Pushd' und' Popd' dann. – Gilles

+0

@Giles Ich wusste nicht, dass es POSIX war, und dachte, dass es ein Bashismus war. Danke, dass du das unterstrichen hast! –

2

Sie auch Shell-Erweiterung verwenden können:

git add app/frontend/modules/file{1,3}

Verwandte Themen