programing

추적되지 않은 파일에 gitdiff를 사용할 수 있습니까?

lastcode 2023. 6. 21. 22:38
반응형

추적되지 않은 파일에 gitdiff를 사용할 수 있습니까?

질문이 가능합니까?git diff되지 않은 하거나, " 디출력에추지것않포는함하파을일다좋것가습이니장는또", "하사용프는되적은것좋▁in다▁to습"를 .git add새로 만든 파일과 편집한 기존 파일에서 다음을 사용합니다.

git diff --cached

?

최신 Git 버전을 사용하면 다음을 수행할 수 있습니다.git add -N 파일)--intent-to-add가 0인 이 추가됩니다을 클릭하면 해당 위치의 인덱스에 길이가 0인 블롭이 추가됩니다.결과적으로 "추적되지 않은" 파일이 이제 길이가 0인 파일에 모든 내용을 추가하기 위한 수정이 되고 "gitdiff" 출력에 표시됩니다.

git diff

echo "this is a new file" > new.txt
git diff

git add -N new.txt
git diff
diff --git a/new.txt b/new.txt
index e69de29..3b2aed8 100644
--- a/new.txt
+++ b/new.txt
@@ -0,0 +1 @@
+this is a new file

슬프게도, 지적했듯이, 당신은 할 수 없습니다.git stash이 는있동에를 있는 --intent-to-add파일 보류 중입니다.저장해야 하는 경우에도 새 파일을 추가한 다음 저장하면 됩니다.또는 에뮬레이션 해결 방법을 사용할 수 있습니다.

git update-index --add --cacheinfo \
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 new.txt

(익명 설정은 여기에 있는 친구입니다.)

인덱스 파일과 추적되지 않은 파일 모두에 경로를 제공하는 것만으로 차별화할 수 있다고 생각합니다.

git diff --no-index tracked_file untracked_file

100%는 아니지만 어떤 이유로든 수락된 답변에서 제안한 대로 인덱스에 파일을 추가하지 않으려면 다음과 같은 다른 옵션이 있습니다.

파일이 추적되지 않은 경우에는 파일 전체가 차이가 나는 것이 분명하므로 다음과 같이 적은 양으로 파일을 볼 수 있습니다.

less $(git ls-files --others --exclude-standard)

다음을 사용하여 둘 사이를 탐색합니다.:n그리고.:p다음과 이전..

주석에서 업데이트:패치 형식이 필요한 경우 다음과 결합할 수도 있습니다.git diff:

git ls-files --others --exclude-standard -z | xargs -0 -n 1 git --no-pager diff /dev/null | less

이 경우 출력을 파일로 리디렉션하거나 다른 diff 명령을 사용할 수도 있습니다.

디프하고 디프에되지 않은 의, "헤드" (HEAD에 대해 추적되지 않은 파일이 포함되기를 원하는 경우).add -N/--intent-to-add사용할 수 없습니다, 왜냐하면 그것은 깨지기 때문입니다. git stash.

여기 제 자, 제가 있습니다.git diffㅠㅠㅠㅠ 에 해킹은 특별히 깨끗한 솔루션은 아니지만 대화형으로만 사용하기 때문에 해킹은 괜찮습니다.

d() {
    if test "$#" = 0; then
        (
            git diff --color
            git ls-files --others --exclude-standard |
                while read -r i; do git diff --color -- /dev/null "$i"; done
        ) | `git config --get core.pager`
    else
        git diff "$@"
    fi
}

그냥입을 합니다.d되지 않은 diff한 부분) 및 Diff(Diff(Diff)에 합니다.d args...할 것입니다.git diff.

주의:

  • 우리는 여기서 그 사실을 이용하고 있습니다.git diff정말로 개별적인 차이가 연관되어 있기 때문에, 그것을 말할 수 없습니다.d"실제 diff" 출력 - 추적되지 않은 모든 파일이 마지막으로 정렬된다는 사실을 제외합니다.
  • 이 기능의 유일한 문제는 방향 수정을 해도 출력이 컬러화된다는 것입니다. 하지만 논리를 추가하는 것은 귀찮습니다.
  • 저는 단지 교묘한 인수 목록을 조립하는 것만으로는 추적되지 않은 파일을 포함시킬 방법을 찾을 수 없었습니다.git diff누군가 이 작업을 수행하는 방법을 알아내거나 기능이 추가된 경우git미래의 어느 시점에, 여기에 메모를 남겨주세요!
git add -A
git diff HEAD

필요한 경우 패치를 생성하고 다음을 수행합니다.

git reset HEAD

한 파일의 경우:

git diff --no-index /dev/null new_file

모든 새 파일의 경우:

for next in $( git ls-files --others --exclude-standard ) ; do git --no-pager diff --no-index /dev/null $next; done;

별칭:

alias gdnew="for next in \$( git ls-files --others --exclude-standard ) ; do git --no-pager diff --no-index /dev/null \$next; done;"

모든 수정된 파일과 새 파일이 하나의 명령으로 결합된 경우:

{ git --no-pager diff; gdnew }

이것은 나에게 효과가 있습니다.

git add my_file.txt
git diff --cached my_file.txt
git reset my_file.txt

마지막 단계는 선택 사항이며, 파일이 이전 상태(추적되지 않음)로 유지됩니다.

패치를 생성하는 경우에도 유용합니다.

  git diff --cached my_file.txt > my_file-patch.patch

업데이트: 단계별 및 단계별 변경에 대한 답변입니다.추적되지 않고 추적되지 않습니다.추적/추적되지 않은 정보는 승인된 답변을 참조하십시오.후세를 위해 여기를 떠나는 것.

다음은 단계별 변경사항만 제공합니다.

$ git diff

단계별 변경과 단계별 변경을 모두 수행하려면 다음을 추가합니다.HEAD다음 명령으로:

$ git diff HEAD

새 파일을 스테이징하고 스테이징된 파일을 차등화할 수 있다는 아이디어를 사용하여 이 두 가지를 결합하여 차이를 확인할 수 있습니다.저는 사용하기 쉽다고 생각합니다.

  1. 디프를 확인할 파일을 추가합니다.이 경우 추적되지 않은 파일만 추가합니다.선택적으로 디프를 확인할 파일만 추가하도록 선택할 수 있습니다.

    git stash && git add . && git stash pop 
    
  2. 디프 스테이징

    git diff --staged
    
  3. 필요한 경우 준비된 파일 재설정

    git reset
    

위의 모든 것들을 종합하면,

   git stash && git add . && git stash pop && git diff --staged && git reset 

일반적으로 원격 위치 팀과 함께 작업할 때는 동일한 파일에서 다른 팀이 수행하는 변경 사항에 대해 사전에 알고 있어야 합니다.git stages untrack-->staged-->커밋을 수행하기 전에 원격 팀과의 병합 충돌을 불필요하게 해결하거나 새로운 로컬 분기를 만들고 메인 분기에서 비교 및 병합하는 데 도움이 되는 bash 스크립트를 작성했습니다.

#set -x 
branchname=`git branch | grep -F '*' |  awk '{print $2}'`
echo $branchname
git fetch origin ${branchname}
for file in `git status | grep "modified" | awk "{print $2}" `
do
echo "PLEASE CHECK OUT GIT DIFF FOR "$file 
git difftool FETCH_HEAD $file ;
done

위 스크립트에서 원격 메인 브랜치(마스터 브랜치는 필요 없음)를 가져와 FETCH_HEAD가 내 수정된 파일 목록만 만들고 수정된 파일과 gitdiff 도구를 비교합니다.

여기서 많은 다양한 도구가 git에 의해 지원됩니다.GUI 비교가 잘 되도록 'Meld Diff Viewer'를 구성합니다.

사하여해를 이용한 git stash:

# Stash unstaged changes
git stash --keep-index --include-untracked --message="pre-commit auto-stash"
git stash show --only-untracked stash@{0}
git stash pop

나는 이것이 사용되는 스크립트의 맥락에서 필요했습니다.git stash(즉, 사전 커밋 후크).다음은 제 전체 작업 사례입니다.

# Stash unstaged changes
# NOTE: we always create a stash - possibly even a totally empty one.
git stash --keep-index --include-untracked --message="pre-commit auto-stash"
diffTracked=$(git diff --stat --staged stash@{0})
diffUntracked=$(git stash show --only-untracked stash@{0})
[[ $diffTracked || $diffUntracked ]] && {
  echo "Stashed diff:"
  # Ensure diffs have standard coloring:
  git diff --stat --staged stash@{0}
  git stash show --only-untracked stash@{0}
}

로컬 커밋이 없다고 가정하면,

git diff origin/master

언급URL : https://stackoverflow.com/questions/855767/can-i-use-git-diff-on-untracked-files

반응형