webentwicklung-frage-antwort-db.com.de

So vermeiden Sie die Angabe des absoluten Dateipfads während git-add

Die Verwendung des Befehls git add wird langwierig, wenn der Dateipfad länger wird. Zum Beispiel git add src_test/com/abc/product/server/datasource/manager/aats/DSManger.Java
Kann die Angabe des absoluten Dateipfads umgangen werden? Kann ein Muster oder etwas verwendet werden?

Ich weiß, dass wir git gui verwenden können. Aber ich möchte es mit cmd line machen. 

Vielen Dank im Voraus für die Eingaben.

52
Vaman Kulkarni

Bei Unix-ähnlichen Systemen können Sie den Stern immer verwenden, um auf Dateien zu zeigen, z.

 git add *DSManager.Java

enthält alle DSManager.Java-Dateien, die git in Ihrem Quellbaum finden kann, beginnend mit Ihrem aktuellen Arbeitsverzeichnis.

48
Steffen

Hier ist eine weitere Möglichkeit, Dateien hinzuzufügen. Zumindest in git unterstützt 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

Drücken Sie 2, um Update auszuwählen, oder geben Sie u ein.

           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

Drücken Sie die Nummer, die der Datei entspricht, die Sie bereitstellen möchten. Trennen Sie mehrere Nummern durch ein Komma, z. 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>>

Drücken Sie einfach [enter] hier.

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.

Geben Sie zum Beenden schließlich 7 oder q ein.

33
enzipher

Mit bash können Sie "globstar" (shopt -s globstar) einstellen und dann Folgendes tun:

git add **/DSManger.Java

um alle Dateien mit dem Namen DSManager.Java unter dem aktuellen Verzeichnis hinzuzufügen.

(**/ entspricht allen Verzeichnissen und Unterverzeichnissen.)

31
dogbane

Ich bin mir nicht sicher, ob ich deine Frage verstehe. 

Um alle Dateien hinzuzufügen (noch nicht hinzugefügt), verwenden Sie: 

git add .

Wenn Sie alle Dateien außer einer Datei hinzufügen müssen, fügen Sie sie alle hinzu und entfernen Sie die Dateien mit:

git reset HEAD <file>

Sie können auch alle Dateien in einem Unterverzeichnis mit hinzufügen 

git add subdir/

Eine Sache, die ich als nervig empfinden kann, ist, wenn Sie Dateien umbenennen, müssen Sie den neuen Dateinamen hinzufügen und git rm den alten Namen eingeben. Wenn Sie ein Verzeichnis umbenennen, kann dies ärgerlich sein. Dieser (nur Unix) git-Alias ​​löst dieses Problem (fügen Sie es in Ihre Datei ~/.gitconfig ein:

[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

Dadurch werden alle neuen Dateien hinzugefügt, alle gelöschten Dateien werden entfernt und dem Index hinzugefügt.

2

Ich glaube, Sie können einfach "git add DSManger.Java" sagen, wenn sich Ihr Terminalfenster derzeit im richtigen Ordner befindet (src_test/com/abc/product/server/datasource/manager/aats). Also mach einfach:

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

Ansonsten fällt mir kein anderer Weg ein, wenn Sie kein separates Repo erstellen.

1
Jon

Bitte werfen Sie einen Blick auf dieses Beispiel-Bash-Skript, das ich für diesen Zweck erstellt habe. Link zum Github Repo

#!/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.
'

Beispielausgabe

$ ./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
0
Krishnadas PC