61

ファイルパスが長くなると、コマンドの使用git addが面倒になります。たとえば git add src_test/com/abc/product/server/datasource/manager/aats/DSManger.java
、絶対ファイルパスの指定をバイパスすることは可能ですか? ある種のパターンか何かを使用している可能性がありますか?

を使用できることはわかっていますgit gui。しかし、私はcmdラインを使ってやりたいです。

入力していただきありがとうございます。

4

6 に答える 6

65

Unix ライクなシステムでは、いつでも星印を使用してファイルを指すことができます。

 git add *DSManager.java

現在の作業ディレクトリから始まるソース ツリー内で git が見つけることができるすべての DSManager.java ファイルが含まれます。

于 2011-06-06T07:36:38.670 に答える
35

bash では、「globstar」( shopt -s globstar) を設定してから、次の操作を実行できます。

git add **/DSManger.java

現在のディレクトリの下にある DSManager.java という名前のすべてのファイルを追加します。

(**/すべてのディレクトリとサブディレクトリに一致します。)

于 2011-06-06T07:37:14.177 に答える
3

あなたの質問を理解しているかどうかわかりません。

すべてのファイル (まだ追加されていない) を追加するには、次を使用します。

git add .

1 つのファイルを除くすべてのファイルを追加する必要がある場合は、すべてをコールド アドしてから、次のコマンドを使用してファイルを削除します。

git reset HEAD <file>

サブディレクトリ内のすべてのファイルを追加することもできます

git add subdir/

ファイルの名前を変更するとき、新しいファイル名を追加し、古い名前を git rm する必要があることは、煩わしいと私が知っていることの 1 つです。ディレクトリの名前を変更するとき、これは煩わしい場合があります。この (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

これにより、すべての新しいファイルが追加され、削除されたすべてのファイルが削除され、インデックスにステージングされます。

于 2011-06-06T07:40:29.530 に答える
2

端末ウィンドウが現在適切なフォルダー (src_test/com/abc/product/server/datasource/manager/aats) に移動している場合は、「git add DSManger.java」と言うだけでよいと思います。だからただやってください:

cd src_test/com/abc/product/server/datasource/manager/aats
git add DSManger.java

そうでなければ、別のリポジトリを作成しない限り、他の方法は考えられません。ここに画像の説明を入力

于 2011-06-06T07:32:35.093 に答える
0

この目的のために作成したこのサンプル 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 [ $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
于 2018-05-06T01:25:49.293 に答える