web-dev-qa-db-fra.com

Comment éviter de dire un chemin de fichier absolu pendant que git-add

Utiliser la commande git add devient fastidieux une fois que le chemin du fichier est long. Par exemple, git add src_test/com/abc/product/server/datasource/manager/aats/DSManger.Java
Est-il possible d'ignorer la spécification du chemin de fichier absolu? Peut-être en utilisant une sorte de motif ou quelque chose?

Je sais que nous pouvons utiliser git gui. Mais je veux le faire en utilisant la ligne cmd. 

Merci d'avance pour les entrées.

52
Vaman Kulkarni

Pour les systèmes de type Unix, vous pouvez toujours utiliser l'étoile pour pointer sur des fichiers, par exemple.

 git add *DSManager.Java

comprendra tous les fichiers DSManager.Java que git peut trouver dans votre arborescence source à partir de votre répertoire de travail actuel.

48
Steffen

Voici un autre moyen d'ajouter des fichiers. Pris en charge au minimum dans 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

Appuyez sur 2 pour sélectionner la mise à jour ou tapez 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

Appuyez sur le numéro correspondant au fichier que vous souhaitez créer. Séparez plusieurs numéros avec une virgule, par ex. 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>>

Appuyez simplement sur [enter] ici.

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.

Enfin, tapez 7 ou q pour quitter.

33
enzipher

Avec bash, vous pouvez définir "globstar" (shopt -s globstar) puis faire:

git add **/DSManger.Java

pour ajouter tous les fichiers appelés DSManager.Java présents sous le répertoire en cours.

(**/ correspond à tous les répertoires et sous-répertoires.)

31
dogbane

Je ne suis pas sûr de comprendre votre question. 

Pour ajouter tous les fichiers (pas encore ajoutés), utilisez: 

git add .

Si vous devez ajouter tous les fichiers sauf un, vous ajoutez tout froid, puis supprimez les fichiers en utilisant:

git reset HEAD <file>

Vous pouvez également ajouter tous les fichiers d’un sous-répertoire avec 

git add subdir/

Une chose que je sais peut être agaçante, c’est que lorsque vous renommez des fichiers, vous devez ajouter le nouveau nom de fichier et obtenir l’ancien nom. Lorsque vous renommez un répertoire, cela peut être ennuyeux. Cet alias git (unix seulement) résout ce problème (mettez-le dans votre fichier ~/.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

Cela ajoute tous les nouveaux fichiers et supprime tous les fichiers supprimés et les place dans l'index.

2

Je crois que vous pouvez simplement dire "git add DSManger.Java" si votre fenêtre de terminal est actuellement cd dans le dossier approprié (src_test/com/abc/product/server/datasource/manager/aats). Alors faites juste:

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

Sinon, je ne peux pas penser à autre chose à moins que vous ne fassiez une pension séparée.

1
Jon

S'il vous plaît jeter un oeil à cet exemple de script bash que j'ai créé à cet effet. Lien vers le 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.
'

Exemple de sortie

$ ./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