Эффективно добавлять элементы в git index - PullRequest
3 голосов
/ 28 декабря 2010

Я нахожу очень утомительным писать полные пути при добавлении измененных файлов в индекс. Например, я изменил 3 файла, но хочу зафиксировать только 2 из них:

# 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

Так что я должен напечатать столько, сколько:

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

Я ищу способ добавления элементов по их индексу в список состояний git? Что-то вроде

git add %1 %3

Ответы [ 4 ]

4 голосов
/ 28 декабря 2010

Использовать interactive добавить:

git add -i

Он попросит вас указать каждый файл, если вы хотите добавить его в коммит.

Вы можете даже пойти дальше и выбирать на основе патчей, что всегда полезно:

git add -p
2 голосов
/ 29 декабря 2010

Вы также можете использовать расширение оболочки:

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

2 голосов
/ 28 декабря 2010
cd apps/frontend/config/modules
git add file1 file3
cd - #go back
1 голос
/ 28 декабря 2010

Я использовал подобный скрипт, который написал, чтобы добавить только 1 файл, например git nadd N чтобы добавить N-й измененный файл. Его не должно быть сложно изменить, чтобы разрешить несколько файлов.

#!/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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...