programing

git-add 동안 절대 파일 경로 지정을 피하는 방법

projobs 2021. 1. 18. 07:29
반응형

git-add 동안 절대 파일 경로 지정을 피하는 방법


git add파일 경로가 길어지면 명령 사용 이 지루해집니다. 예를 들어 git add src_test/com/abc/product/server/datasource/manager/aats/DSManger.java
절대 파일 경로 지정을 우회 할 수 있습니까? 어떤 종류의 패턴이나 무언가를 사용하고 있습니까?

나는 우리가 git gui. 하지만 cmd 라인을 사용하여하고 싶습니다.

입력 해 주셔서 미리 감사드립니다.


유닉스 계열 시스템의 경우 항상 별표를 사용하여 파일을 가리킬 수 있습니다.

 git add *DSManager.java

git은 현재 작업 디렉토리에서 시작하는 소스 트리에서 찾을 수있는 모든 DSManager.java 파일을 포함합니다.


다음은 파일을 추가하는 또 다른 방법입니다. 최소한 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

눌러 2갱신을 선택하거나 입력합니다 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

준비하려는 파일에 해당하는 번호를 누릅니다. 여러 숫자를 쉼표로 구분하십시오 (예 :) 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>>

[enter]여기를 누르 세요.

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.

마지막으로 입력 7하거나 q종료합니다.


bash를 사용하면 "globstar"( shopt -s globstar)를 설정하고 다음을 수행 할 수 있습니다.

git add **/DSManger.java

현재 디렉토리 아래에있는 DSManager.java라는 모든 파일을 추가합니다.

( **/모든 디렉토리 및 하위 디렉토리와 일치합니다.)


질문을 이해하는지 잘 모르겠습니다.

모든 파일을 추가하려면 (아직 추가되지 않음) 다음을 사용하십시오.

git add .

파일을 하나만 제외하고 모두 추가해야하는 경우 모두 콜드 추가 한 다음 다음을 사용하여 파일을 제거합니다.

git reset HEAD <file>

다음을 사용하여 하위 디렉토리의 모든 파일을 추가 할 수도 있습니다.

git add subdir/

내가 아는 한 가지 성가신 점은 파일 이름을 바꿀 때 새 파일 이름을 추가하고 git rm 이전 이름을 추가해야한다는 것입니다. 디렉토리 이름을 바꿀 때 이것은 성 가실 수 있습니다. 이 (유닉스 전용) 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

이렇게하면 모든 새 파일이 추가되고 삭제 된 모든 파일이 제거되고 인덱스에 스테이징됩니다.


터미널 창이 현재 적절한 폴더 (src_test / com / abc / product / server / datasource / manager / aats)에 CD가있는 경우 "git add DSManger.java"라고 말하면됩니다. 그러니 그냥하세요 :

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

그렇지 않으면 별도의 repo를 만들지 않는 한 다른 방법을 생각할 수 없습니다.


이 목적을 위해 만든이 샘플 bash 스크립트를 살펴보십시오. Github Repo에 연결

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

참조 URL : https://stackoverflow.com/questions/6248917/how-to-avoid-specifying-absolute-file-path-while-git-add

반응형