Как избежать указания абсолютного пути к файлу во время git-add
используя git add
команда становится утомительной, как только путь к файлу становится длинным. Например
git add src_test/com/abc/product/server/datasource/manager/aats/DSManger.java
Можно ли обойти указание абсолютного пути к файлу? Может быть использовать какой-то шаблон или что?
Я знаю, что мы можем использовать git gui
. Но я хочу сделать это с помощью cmd line.
заранее спасибо за входы.
6 ответов
для unix-подобных систем вы всегда можете использовать звезду, чтобы указать на файлы, например
git add *DSManager.java
будет включать в себя все DSManager.java-файлы git можно найти в исходном дереве, начиная с текущего рабочего каталога.
С помощью bash вы можете установить "globstar" (shopt -s globstar
) и выполните:
git add **/DSManger.java
чтобы добавить все файлы с именем DSManager.java присутствует ниже текущего каталога.
(**/
соответствует всем каталогам и подкаталогам.)
вот еще один способ добавления файлов. Поддерживается по крайней мере в Git 1.7.1.
$ git add -i
staged unstaged path
1: unchanged +61/-61 a/very/long/path/that/we/really/dont/want/to/type.txt
2: unchanged +1/-1 another/very/long/path/that/we/really/dont/want/to/type.txt
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> 2
пресс 2
чтобы выбрать обновить, или введите u
.
staged unstaged path
1: unchanged +61/-61 a/very/long/path/that/we/really/dont/want/to/type.txt
2: unchanged +1/-1 another/very/long/path/that/we/really/dont/want/to/type.txt
Update>> 2
нажмите номер, соответствующий файлу, который вы хотите этап. Разделите несколько чисел запятыми, например 1,2
.
staged unstaged path
1: unchanged +61/-61 a/very/long/path/that/we/really/dont/want/to/type.txt
* 2: unchanged +1/-1 another/very/long/path/that/we/really/dont/want/to/type.txt
Update>>
нажмите [enter]
здесь.
updated one path
*** Commands ***
1: status 2: update 3: revert 4: add untracked
5: patch 6: diff 7: quit 8: help
What now> q
Bye.
наконец-то типа 7
или q
в выход.
Я не уверен, что понимаю ваш вопрос.
добавить все файлы (еще не добавлена), использовать:
git add .
Если вам нужно добавить все, кроме одного файла, вы холодно добавить все, а затем удалить файлы с помощью:
git reset HEAD <file>
вы также можете добавить все файлы в подкаталог с помощью
git add subdir/
одна вещь, которую я знаю, может раздражать, когда вы переименовываете файлы, вам нужно добавить новое имя файла и git rm старое имя. При переименовании каталога это может раздражать. Этот (только unix) псевдоним git решает эту проблему (поместите его в свой~/.файл gitconfig хранит настройки:
[alias] ;add after this heading or create this heading if it does not exist
addremove = !git add . && git ls-files --deleted | xargs --no-run-if-empty git rm
это добавляет все новые файлы и удаляет все удаленные файлы и этапы его в индекс.
Я считаю, что вы можете просто сказать "git add DSManger.java", если ваше окно терминала в настоящее время cd в соответствующую папку (src_test/com/abc/product/server/datasource/manager/aats). Так что просто сделайте:
cd src_test/com/abc/product/server/datasource/manager/aats
git add DSManger.java
в противном случае я не могу придумать другого способа, Если вы не сделаете отдельное РЕПО.
пожалуйста, посмотрите на этот пример сценария bash, который я создал для этой цели. ссылка на репозиторий Github
#!/bin/bash
# Script Name: git-bash.sh
#
# Author: Krishnadas P.C<pckrishnadas88@gmail.com>
# Date : 05-05-2018
#
# Description: A simple script to manipulate git files.
# TODO add more options and add Error Handlers.
#declare color variables
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
#print the current git branch
echo "On Branch - $(git branch)"
#Get only staged files
gitstaged=($(git diff --name-only --cached))
#Get changes not staged for commit
gitnotstaged=($(git diff --name-only))
#Get only untracked files
gituntracked=($(git ls-files --others --exclude-standard))
if [ $# -ge 3 ];
then
if [ == "st" ];
then
git ${gitstaged[]}
elif [ == "nt" ];
then
git ${gitnotstaged[]}
elif [ == "ut" ];
then
git ${gituntracked[]}
else
echo "Invalid input provied."
fi
fi
#Get the new status after the command has been executed.
gitstaged=($(git diff --name-only --cached))
#Get changes not staged for commit
gitnotstaged=($(git diff --name-only))
#Get only untracked files
gituntracked=($(git ls-files --others --exclude-standard))
#print the staged files.
for i in ${!gitstaged[@]}; do
if [ $i -eq 0 ]; then
echo "Changes to be committed:"
fi
echo "${green}st$i - ${gitstaged[$i]}${reset}"
done
#print the changes not staged files.
for i in ${!gitnotstaged[@]}; do
if [ $i -eq 0 ]; then
echo "Changes not staged for commit:"
fi
echo "${red}nt$i - ${gitnotstaged[$i]}${reset}"
done
#print the untracked files.
for i in ${!gituntracked[@]}; do
if [ $i -eq 0 ]; then
echo "Untracked files:"
fi
echo "${red}ut$i - ${gituntracked[$i]}${reset}"
done
: 'Example how to:
#$ ./git-bash.sh
Untracked files
ut0 - git-bash.sh
ut1 - git-status.txt
ut2 - test
$./git-bash.sh add ut 0
Staged files
st0 - git-bash.sh
st1 - git-status.txt
Untracked files
ut0 - test
ut stands for untracked files.
nt stands for notstaged tracked files.
st stands for staged files.
'
пример вывода
$ ./git-bash.sh
On Branch - * master
Untracked files:
ut0 - git-bash.sh
ut1 - git-status.txt
ut2 - test
$ ./git-bash.sh add ut 2
On Branch - * master
Changes to be committed:
st0 - test
Untracked files:
ut0 - git-bash.sh
ut1 - git-status.txt