git update-index --assume-unchanged on directory


101

자식 1.7.12

주어진 디렉토리 아래의 모든 파일을 변경되지 않은 것으로 표시하고 싶습니다.

1) git update-index --assume-unchaged dir/"무시 경로"를 제공합니다.

2) git update-index --assume-unchaged dir/*추적되지 않는 파일을 만나게되므로 빠르게 실패하므로 "심각 : 파일을 표시 할 수 없음"을 표시하고 종료됩니다.

3) 표시 할 파일 목록을 생성 해보십시오. cd원하는 디렉토리로 이동 한 다음 git ls-files | tr '\n' ' ' | git update-index --assume-unchanged. 이것은 오류 메시지를 생성하지 않지만 파일을 성공적으로 표시하지는 않습니다. 명령의 첫 번째 부분 인은 git ls-files | tr '\n' ' '표시하려는 모든 파일의 공백으로 구분 된 목록을 올바르게 생성합니다. 해당 명령의 출력을 복사하여 명령 줄에 붙여 넣으면 git update-index명령이 작동합니다. 파이프로 작동하지 않는 것은 무엇입니까?

아니요, dir.gitignore 에 추가 하는 것만으로는 충분하지 않습니다 . 이 파일이 저장소에 있어야하지만 원하지 않는 변경이 로컬에서 수행되므로 사용자가 끌어 올 수 있도록 무시해야합니다.

답변:


174

git update-index 표준 입력이 아닌 명령 줄에서 파일 이름을 원합니다.

1 단계:

cd 변경되지 않은 것으로 가정하려는 폴더에

2 단계:

다음 중 하나를 수행 할 수 있습니다.

git update-index --assume-unchanged $(git ls-files | tr '\n' ' ')

또는

git ls-files | tr '\n' ' ' | xargs git update-index --assume-unchanged

두 경우 모두 공백이있는 파일 이름은 문제가됩니다. 그것들이 있다면 이것을 사용할 수 있습니다.

git ls-files -z | xargs -0 git update-index --assume-unchanged

편집 : @MatthewScharley의 git ls-files -z.

Windows 명령

참고 : Windows를 사용하는 경우 Git Bash 를 사용 하여 다음 명령을 실행하십시오.


2
참고로, 그`| tr '\ n' ''`비트는 필요하지 않습니다.
Václav Slavík

7
@twalberg : 그냥 사용할 수 있습니다git ls-files -z
매튜 Scharley

2
| @twalberg이 명령을 취소하는 방법 "용 xargs -0 자식 갱신 지수는 --assume - 변경 자식 LS-파일은 -z"
모하메드 후세인

3
@MohamedHussain git ls-files -z | xargs -0 git update-index --no-assume-unchanged, 나는 ... 생각
twalberg

1
git ls-files -z | git update-index -z --stdin깨끗합니다.
Jed

22

findGNU Findutils 의 명령에는 구문이 약간 특별하지만 -exec을 사용하는 대부분의 번거 로움을 제거 하는 옵션이 xargs있습니다. 그러나 공백이있는 파일 이름을 완벽하게 처리합니다.

이 명령은 나열된 디렉토리의 모든 파일이 변경되지 않은 것으로 간주하도록 git을 가져옵니다.

find path/to/dir -type f -exec git update-index --assume-unchanged '{}' \;

Find는 -execuntil ;(쉘이 그것을 먹지 않도록 이스케이프해야 함) 이후 모든 인수를 취하고 발견 된 각 파일에 대해 한 번씩 실행 {}하고 발견 된 파일의 이름으로 대체합니다 (다시 작은 따옴표로 묶여 쉘이 먹지 않음).

사용 find(경기가 파일 이름이 식을 일치하는지 여부, 파일 또는 디렉토리인지, 최대 재귀 수준)의 키워드와 일치하고 -exec당신은 강력한 것들 모든 종류의 작업을 수행 할 수 있습니다.

find명령 의 다른 구현에 대해 확실하지 않습니다 . YMMV.


2
-exec표준 옵션 입니다. 또한 -exec git update-index --assume-unchanged {} +여러 파일 이름을 한 번에 명령에 전달하여 git 명령이 호출되는 횟수를 줄일 수도 있습니다 (표준에 의해 정의 됨).
Tom Fenech

16

에 디렉토리 이름을 추가합니다 .git/info/exclude. 추적되지 않은 파일에 대해 작동합니다.


이것은 훌륭합니다! 이것이 파일에서도 작동하는지 알고 있습니까?
betomoretti 2016 년

그러나 이것은 추적되지 않은 파일 github를 푸시하지 않습니다! 레코드에서 그들을 무시하지만 실제로는 리포지토리에 보관할 수있는 방법이 있습니까?
Mahmoud Zalt 2017 년

2

네,

git update-index --assume-unchanged

디렉토리가 아닌 파일에서만 작동합니다. 더 빠른 방법 중 하나라고 생각합니다.

cd dir
ls | xargs -l git update-index --assume-unchanged

2
을 사용하는 대신 cddir을 최종 인수로 전달할 수 있습니다 git ls-files -- $DIR | xargs -l git update-index --assume-unchanged -- $DIR..
kzh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.