programing

Git: 상태, diff 등에서 '수정된 내용'/dirty 서브모듈 항목의 나열을 억제할 수 있습니까?

goodsources 2023. 9. 13. 22:35
반응형

Git: 상태, diff 등에서 '수정된 내용'/dirty 서브모듈 항목의 나열을 억제할 수 있습니까?

(1.6.x 릴리스 즈음에) 하위 모듈 내부의 변화를 알게 된 것 같습니다.그것은 나를 짜증나게 할 뿐입니다.

$ git 상태 벤더 | grep 수정:
#       수정됨: 벤더/벤더(수정된 내용)
$ git diff 벤더/diff --gita/gita/gita b/gita b/gita/gita--- a/slot/slot/slot+++ b/b/bunt/bunt/bike@@ -1 +1 @@-서브프로젝트 커밋 046c900df27994d454b7f906caa0e4226bb42b6f+서브프로젝트 커밋 046c900df27994d454b7f906caa0e4226bb42b6f-dirty

멈춰주세요.

편집:

네, 그래서 답이 있습니다.이제 또 한가지 질문이 있습니다.

이거 넣어도 되나요?~/.gitconfig? 처음부터 그럴 수 없는 것 같고 패치를 훑어보니 유망한 것이 보이지 않았습니다. (가명을 만들 수 있을 것 같습니다.)

.gitmodules 파일 내에 추가된 모든 하위 모듈에 대해 무시 모드를 설정할 수도 있습니다.

바로 오늘 저는 이 문제에 직면했고 해결책을 찾은 후 즉시 블로그에 이 문제에 대한 기사를 썼습니다.git 하위 모듈의 변경을 무시하는 방법

그것의 요점은:

서브모듈을 추가하면 다음과 같은 이름의 파일이 표시됩니다..gitmodules당신의 저장소의 근본에

거기에 한 줄만 더하면 됩니다..gitmodules파일:

[submodule "bundle/fugitive"]
    path = bundle/fugitive
    url = git://github.com/tpope/vim-fugitive.git
    ignore = dirty

사용자가 억제할 수 있는 변경 통지에는 두 가지 종류가 있습니다.

첫번째는untracked content하위 모듈을 변경하지만 아직 변경하지 않았을 때 발생합니다.상위 저장소는 이를 인식하고git status그에 따라 보고합니다.

modified: modules/media (untracked content)

다음을 사용하여 이를 억제할 수 있습니다.

[submodule "modules/media"]
   path = modules/media
   url = git@github.com:user/media.git
   ignore = dirty

그러나 변경 사항을 커밋하면 상위 리포지토리가 다시 한 번 주의하고 그에 따라 보고합니다.

modified:   modules/media (new commits)

이런 것들을 억제하고 싶다면, 당신은 무시해야 합니다.all변화들

[submodule "modules/media"]
   path = modules/media
   url = git@github.com:user/media.git
   ignore = all

업데이트: nilshalldenwang의 추가 가능성에 대한 답변 보기(그리고 찬성).gitmodules지정된 하위 모듈의 dirty 상태를 무시하기 위한 config 매개 변수를 파일로 만듭니다.

ignore = dirty

그래서 1.7.2가 나왔으며 다음을 포함합니다.--ignore-submodules에 대한 옵션status.

부터git help status:

--submodules [=<when>]변경사항을 찾을 때 하위 모듈에 대한 변경사항은 무시합니다.
<when>은 "미추적", "미추적" 또는 "모두"일 수 있습니다.는 기본값입니다."Untracked"가 사용될 때 하위 모듈은트랙이 없는 경우에만 더러운 것으로 간주되지 않습니다.내용(수정된 내용은 여전히 검색됩니다).
"dirty"를 사용하면 작업 트리의 모든 변경 사항이 무시됩니다.하위 모듈, 에 저장된 커밋에 대한 변경 사항만 해당superproject가 표시됩니다(이것은 이전의 동작이었습니다).1.7.0)."all"을 사용하면 하위 모듈에 대한 모든 변경 내용이 숨겨집니다.하위 모듈 요약의 출력을 억제합니다.config 옵션 상태.submodule summary set).

The value that I want is dirty.

git status --ignore-submodules=dirty

I use an alias because I'm lazy:

alias gst='git status --ignore-submodules=dirty'

As you mention, the patch git submodule: ignore dirty submodules for summary and status is in the making.

Also announced in the Git 1.7.2-rc2 release:

Git v1.7.2 Release Notes (draft)
================================

Updates since v1.7.1
--------------------

"git status" learned "--ignore-submodules" option.

Meaning:

git config --global diff.ignoreSubmodules dirty

Regarding this as an option is not exactly the approach chosen for now:

After this series I am planning to add a config option 'ignore' to .gitmodules, which can be set for each submodule to either "all", "dirty", "untracked" or "none" (the default).

"git diff" and "git status" will use that config value for each submodule.
Using "--ignore-submodule" overrides this default (and the new parameter "none" will be added there to able to override the config settings).

And to avoid having to do "git submdule sync" every time that option changes, I would like to search for it in .git/config first.
If it is not found there, it will be taken from .gitmodules, if present.

So users can override the setting but if they don't, upstream can change it easily (e.g. when a submodules .gitignore has been updated so that "ignore=untracked" is no longer necessary anymore it can be removed).
Also switching branches will have an effect instantly if the 'ignore' entry in .gitmodules is different between branches.


Another approach to make git status (or any git command) to ignore a particular submodule is available with Git 2.13 (Q2 2017):

git config submodule.<name>.active false

See more at "Ignore new commits for git submodule".

You can also use

% git config [--global] submodule.ignore dirty

to set submodule.ignore = dirty in your .git/config file. --global will set the ignore flag in your ~/.gitconfig and apply to all your repositories. Without it it should set in .git/config for just the repo you're in currently.

The only documentation I can find on this is submodule.<name>.ignore at the git-config docs. I moved it from a .gitmodules file into my ~/.gitconfig and it's still working for me.

You need to add

ignore = dirty

to .gitmodules

I've answered this question here in greater detail.

Just run

git config --global diff.ignoreSubmodules dirty

to add a local config option to ignore those changes.

So git v1.7.2-rc2 has what I want:

$ git diff --ignore-submodules=dirty vendor
# no output
$ git status --ignore-submodules=dirty vendor
# On branch …
nothing to commit (working directory clean)

Building your own git howto:

# get git
git clone git://git.kernel.org/pub/scm/git/git.git git
cd git
git checkout v1.7.2-rc2

# make git. beware of setting prefix
make configure
./configure --prefix=/usr/local
make
sudo make install

# you REALLY don't want to `make doc`, use this instead
sudo make quick-install-man
sudo make quick-install-html

You may not want to add ignore = dirty to .gitmodules, you may want to be more selective about the changes you wished to ignore.

이렇게 하려면 패턴을 추가합니다..git/submodule_foo/bar/info/exclude,어디에submodule_foo/bar/는 하위 모듈의 경로입니다.

패턴은 당신이 추가할 패턴과 유사합니다..gitignore, 루트가 서브모듈 디렉토리인 경우.예를 들어, 이 패턴은 다음을 무시합니다.build하위 모듈의 디렉토리submodule_foo/bar/:

# in .git/submodule_foo/bar/info/exclude:
/build/

언급URL : https://stackoverflow.com/questions/3240881/git-can-i-suppress-listing-of-modified-content-dirty-submodule-entries-in-sta

반응형