tag - Cómo evitar especificar la ruta absoluta del archivo mientras git-add
git tag (6)
El uso git add
comando git add
vuelve tedioso una vez que la ruta del archivo se vuelve larga. Por ejemplo, git add src_test/com/abc/product/server/datasource/manager/aats/DSManger.java
¿Es posible omitir especificar la ruta absoluta del archivo? ¿Puede estar usando algún tipo de patrón o algo así?
Sé que podemos usar git gui
. Pero quiero hacerlo usando la línea de cmd.
Gracias de antemano por las entradas.
Aquí hay otra forma de agregar archivos. Compatible al menos en 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
Presione 2
para seleccionar la actualización o escriba 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
Presione el número correspondiente al archivo que desea representar. Separe los números múltiples con una coma, por ejemplo 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>>
Simplemente presione [enter]
aquí.
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.
Finalmente escriba 7
o q
para salir.
Con bash, puede establecer "globstar" ( shopt -s globstar
) y luego hacer:
git add **/DSManger.java
para agregar todos los archivos llamados DSManager.java presentes debajo del directorio actual.
( **/
coincide con todos los directorios y subdirectorios).
Creo que puede decir "git add DSManger.java" si su ventana de terminal está actualmente en el CD en la carpeta correcta (src_test / com / abc / product / server / datasource / manager / aats). Así que hazlo:
cd src_test/com/abc/product/server/datasource/manager/aats
git add DSManger.java
De lo contrario, no puedo pensar de otra manera a menos que haga un informe separado.
No estoy seguro si entiendo tu pregunta.
Para agregar todos los archivos (aún no agregados), use:
git add .
Si necesita agregar todo menos un archivo, agregue todo y luego elimine los archivos usando:
git reset HEAD <file>
También puede agregar todos los archivos en un subdirectorio con
git add subdir/
Una cosa que sé que puede ser molesta es que cuando renombre los archivos, debe agregar el nuevo nombre de archivo y ponerle el nombre anterior. Al cambiar el nombre de un directorio, esto puede ser molesto. Este (unix solamente) git alias resuelve este problema (póngalo en su archivo ~ / .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
Esto agrega todos los archivos nuevos y elimina todos los archivos eliminados y lo clasifica en el índice.
Para sistemas tipo Unix siempre puede usar la estrella para apuntar a archivos, por ejemplo
git add *DSManager.java
incluirá todos los archivos DSManager.java que git puede encontrar en su árbol fuente comenzando en su directorio de trabajo actual.
Por favor, eche un vistazo a este script de muestra bash que he creado para este propósito. Enlace a 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.
''
Muestra de salida
$ ./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