ファイルパスが長くなると、git add
コマンドの使用は面倒になります。たとえばgit add src_test/com/abc/product/server/datasource/manager/aats/DSManger.Java
絶対ファイルパスの指定をバイパスすることは可能ですか?なんらかのパターンを使用しているのでしょうか?
git gui
を使用できることはわかっています。しかし、私はcmd行を使用してそれをしたいです。
入力を事前に感謝します。
UNIXライクなシステムでは、常にスターを使用してファイルを指すことができます。
git add *DSManager.Java
gitがソースツリー内で現在の作業ディレクトリから検索できるすべての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
と入力して終了します。
Bashを使用すると、 "globstar"(shopt -s globstar
)その後、次のようにします。
git add **/DSManger.Java
現在のディレクトリの下にあるDSManager.Javaというファイルをすべて追加します。
(**/
はすべてのディレクトリとサブディレクトリに一致します。)
あなたの質問が理解できるかどうかわかりません。
すべてのファイル(まだ追加されていない)を追加するには、次を使用します。
git add .
1つを除いてすべてを追加する必要がある場合は、すべてをコールド追加してから、次のコマンドを使用してファイルを削除します。
git reset HEAD <file>
サブディレクトリ内のすべてのファイルを追加することもできます
git add subdir/
面倒なことがわかっていることの1つは、ファイルの名前を変更するときに、新しいファイル名と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
これにより、すべての新しいファイルが追加され、削除されたすべてのファイルが削除されて、インデックスにステージングされます。
端末ウィンドウが現在適切なフォルダー(src_test/com/abc/product/server/datasource/manager/aats)にcdされている場合は、「git add DSManger.Java」とだけ言うことができると思います。だからちょうどしてください:
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<[email protected]>
# 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 [ $2 == "st" ];
then
git $1 ${gitstaged[$3]}
Elif [ $2 == "nt" ];
then
git $1 ${gitnotstaged[$3]}
Elif [ $2 == "ut" ];
then
git $1 ${gituntracked[$3]}
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