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.
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.
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.
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.)
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.
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.
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