IT

Git의 *safe.directory*에 상위 디렉토리를 추가할 수 없습니다.

itgroup 2023. 8. 26. 10:43
반응형

Git의 *safe.directory*에 상위 디렉토리를 추가할 수 없습니다.

을 Git로 v2.35.2.windows.1다음 오류가 발생합니다.

fatal:하지 않은 함): 안전지저장소 ('F:/GitHub/my-project')
이 디렉터리에 대한 예외를 추가하려면 다음을 호출하십시오.

safe. F git config --global --add safe.directory F:/GitHub/my-project

의 상위 를 트상디에를했추습다니고려가하프에 .gitconfig하지만 효과가 없습니다.

[safe]
    directory = F:/GitHub/
    directory = F:/Private/
  • 이에 대한 해결 방법이 있습니까?
  • "x"가 다른 사람의 소유라는 것은 실제로 무엇을 의미합니까?

하고 있는 모든 를 재현진중모인프싶않추다습지니고가에 추가하고 .gitconfigjava.

Git v2.35.3부터는 안전한 디렉토리 검사를 사용하지 않도록 설정할 수 있으므로 모든 "안전하지 않은 저장소" 오류가 종료됩니다(이것은 최신 버전의 2.30-34 패치에서도 작동합니다).

이 작업은 다음을 실행하여 수행할 수 있습니다.

git config --global --add safe.directory '*'1

글로벌 에 다음 됩니다..gitconfig파일 이름:

[safe]
    directory = *

사용하지 않도록 설정하기 전에 이 보안 조치와 보안 조치가 존재하는 이유이해해야 합니다.리포지토리가 공유 드라이브에 저장된 경우에는 이 작업을 수행하면 안 됩니다.

그러나 100% 시스템의 유일한 사용자이고 리포지토리가 로컬로 저장되어 있는 경우 이론적으로 이 검사를 사용하지 않도록 설정하면 위험이 증가하지 않습니다.

또한 이 명령어는 와일드카드를 say당 연산자로 해석하지 않으므로 현재 파일 경로와 결합할 수 없습니다. 이 명령어는 다음 명령어를 사용합니다."*""안전한 리포지토리 검사 사용 안 함/모든 리포지토리를 안전한 것으로 간주"를 의미하는 인수입니다.


1 - Windows의 특정 터미널 프로그램에서 실패할 경우 와일드카드를 단일 대신 큰따옴표로 둘러싸십시오(이 GitHub 문제를 통해).
git config --global --add safe.directory "*"

정답.

이 취약성 발표와 관련된 것 같습니다. https://github.blog/2022-04-12-git-security-vulnerability-announced/

이메일보다는 파일 시스템에 있는 디렉터리의 소유자와 더 관련이 있다고 생각합니다.현재 로그인한 사용자가 폴더의 소유자이기도 합니까?부모 폴더는 어떻습니까?또한 저장소 디렉터리 내에서 git를 호출하는 것입니까?업데이트가 몇 시간밖에 안 돼서 아직 유동적인 것 같습니다.

지금은 git의 메시지에서 알 수 있듯이, 실행합니다.

git config --global --add safe.directory F:/GitHub/my-project

그리고 당신이 전화하고 있는지 확인하세요.git에서.F:/GitHub/my-project현재로는.

편집: 아래 설명에서 확인한 바와 같이, 다음을 포함하는 디렉터리의 상위 소유자입니다..git폴더(git 저장소)가 문제입니다.
프로젝트를 새로 복제하는 것은 사용자가 소유자임을 확인하는 플랫폼 독립적인 방법입니다.

사이드 노트

, 이는 제 되어 있었습니다./opt/flutter저는 루트로 일하지 않기 때문에 같은 문제에 부딪힙니다. 중입니다.git config --global --add safe.directory /opt/flutter정말로 저를 위해 문제를 해결했습니다.

긴 편집: 명확화

숙면을 취한 후 취약성에 대한 게시물을 다시 살펴보니, 약간의 해명이 필요하다고 생각합니다.나머지 답변은 그대로 두겠습니다.
다음과 같은 간단한 디렉토리 구조를 살펴보겠습니다.

/home/
├─ tommy/
│  ├─ .git/
│  ├─ rental_space/
│  │  ├─ mary/
│  │  │  ├─ projects/
│  │  │  │  ├─ phone_app/
│  │  │  │  │  ├─ .git/
│  │  ├─ anthony/

이 경우 사용자는tommy아래에 자신의 디렉토리를 소유하고 있습니다./home그러나 (어떤 이유로) 다른 사용자에게 공간을 임대합니다, 이 경우.mary그리고.anthony.
한다면mary서 로수어, 실하는야지해를 해야 합니까?git 그녀의 의디렉리에토밖에 에, 그나그녀러녀.phone_app그에는 오래된 프젝트버전, 전이로버.git "" " " 하기위디이트동다니합로리리렉검해색토▁a▁go".git저장소처음 발견된 것은 다음에서 온 것입니다./home/tommy/.git이것은 보안 위험입니다. 왜냐하면 다른 사용자가 이 경우에는 다른 사용자가 역할을 할 수 있기 때문입니다.tommy영향을 미칠 수 있음mary가 깃을 실행하면 문제를 일으킬 수 있습니다.
가 Git v2.35.2가 아닌 이 되는 됩니다.mary.말합니다mary된 행된git/home/tommy/rental_space/mary/projects그러면 깃이 체크인할 것입니다.projects하지만 찾을 수 없습니다..git하나의 디렉토리로 이동하여 체크인합니다. 체크인합니다.mary그러나 다시 찾을 수 없습니다..git, 그면다올지만겠가라시러,만▁then지겠올▁but,가라.rental_space에함속에 tommy,것은 아니다.mary새 Git 버전은 여기서 멈추고 질문에서 본 메시지를 인쇄합니다.
/home/tommy/rental_space에▁safe.directory변수는 Git가 진행되도록 허용하지만 설명한 것처럼 보안 위험입니다.

여기서는 Linux와 같은 디렉토리 구조를 사용했지만 Windows에서도 마찬가지입니다.

@derpda가 말했듯이, 그것은 수정된 Git 보안 취약점과 관련이 있습니다.

리눅스에서는 적어도 Git 저장소의 상위 폴더가 사용자 소유인지 확인하여 문제를 해결할 수 있습니다.추할필없다니습가를 추가할 safe.directory폴더 소유권을 적절하게 설정할 수 있는 경우 구성 설정.

소유권이 다른) 합니다.safe.directory구성 설정:

git config --global --add safe.directory /path/to/project

버전 2.35.2.windows.1로 업그레이드한 후 Windows에서 동일한 문제를 발견했습니다.

.git 폴더가 포함된 폴더와 그 안에 있는 모든 파일의 소유권을 가져옴으로써 수정할 수 있었습니다.

다음은 이미 리포지토리 폴더에 있다고 가정하는 명령입니다.

takeown.exe /f . /r

참고: 작업 폴더 내에 여러 리포지토리 폴더가 있는 경우 작업 폴더와 하위 폴더의 소유권을 재귀적으로 가져올 수 있습니다.실행하는 데 더 많은 시간이 걸리지만 이 작업은 한 번만 수행하면 됩니다.

명령은 cmd 아래에서 다음과 같습니다.exe:

takeown.exe /f C:\Users\%USERNAME%\Work /r

또는 powershell.exe 또는 pwsh.exe 아래의 다음과 같습니다.

takeown.exe /f $HOME\Work /r

Visual Studio 2022 사용자(주로):

내 설정은 다음과 같습니다.

  • 버전 Git 전2.36.0.windows.1
  • NAS에서 SMB 네트워크 공유 마운트 \\MyNas\User~하듯이X:\
  • 원격 분기가 다음 날짜에 디렉터리로 복제되었습니다.X:\.
  • NAS와 PC가 동일한 도메인에 있지 않습니다.
  • My IDE: Visual Studio 2022 Enterprise 17.2.0 프리뷰 4.0 (최신)

지금까지의 문제:

NAS와 PC가 동일한 도메인에 있지 않기 때문에 PC 사용자를 NAS 디렉토리의 소유자로 설정할 수 없습니다.

Visual Studio에서 리포지토리를 열 때 콘솔에 다음 오류가 표시되었습니다.

Opening Repository:
X:\Repo
Git failed with a fatal error.
fatal: unsafe repository ('//MyNas/User/Repo' is owned by someone else)
To add an exception for this directory, call:

    git config --global --add safe.directory '%(prefix)///MyNas/User/Repo'

장시간 테스트 후:

Studio의 로, Visual Studio의 Git 은 다음과 같습니다.2.35.2Visual Studio는 "Git for Windows" 구성 요소를 선택하지 않은 경우에도 글로벌 Git 설치 대신 자체 Git 설치를 사용했습니다.

솔루션:

  1. 권장되는 명령을 사용하여 리포지토리 디렉터리를 안전 디렉터리로 추가합니다.

    git config --global --add safe.directory '%(prefix)///MyNAS/User/Repo'
    
    # Or just trust any directory (not really recommended)
    git config --global --add safe.directory *
    
  2. Visual Studio는 Git-Version입니다 (방금 (Global ) (Global Git installation) 에서.C:\Program Files\Git\mingw64\bin그리고 그것들을 붙여넣었습니다.C:\Program Files\Microsoft Visual Studio\2022\Preview\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\Git\mingw64\bin)

파일 복사/붙여넣기의 대안은 스택 오버플로 문제: 시스템설치된 Git.exe를 사용하도록 Visual Studio 구성에서 설명한 것처럼 Visual Studio가 Git의 글로벌 설치를 사용하도록 만드는 입니다.
참고: Visual Studio 설치 디렉토리에서 Git 파일을 이미 덮어썼기 때문에 이 대안을 테스트하지 않았습니다.

주요 참고 사항:

  • 최신 Git 버전(2.36.0)은 안전/신뢰할 수 있는 디렉터리를 지원합니다.
  • IDE가 Git의 최신 버전을 사용하고 있는지 확인합니다.

NTFS 마운트된 파일 시스템(Windows와 공유 데이터 드라이브)에서 작업하는 사용자의 마운트 옵션을 편집할 수 있습니다./etc/fstabdefaults,uid=1000,gid=1000입니다. 기값으로, 의자를영변의 수 ..gitNTFS에 저장합니다.이러한 옵션을 사용하면 루트가 아닌 현재 사용자가 모든 것을 소유하게 됩니다.

Ubuntu 20.xx 사용자 수정 - 2022 업데이트:

이 PPA로 Git를 업데이트하면 이 문제를 해결한 최신 안정적인 업스트림 Git 버전이 제공됩니다.

sudo add-apt-repository ppa:git-core/ppa

sudo apt update

sudo apt install git

참조: https://git-scm.com/download/linux

Windows 시스템을 다시 설치하고 일부 리포지토리 폴더의 소유자가 이전 설치의 이전 사용자이기 때문에 이 문제가 발생했습니다.Git에서는 이러한 폴더를 직접 사용할 수 없습니다.

속성보안고급소유자를 통해 확인할 수 있습니다.만약 현재의 주인이 "S-1-blah-blah-blah"와 같은 것이라면, 당신은 저와 같은 문제에 직면했을 것입니다.

사용자가 해당 폴더의 실제 소유자인 것이 확실하면 다음을 사용할 수 있습니다.takeown명령:

cd F:/GitHub/
takeown /f *

/r제 경우에는 스위치가 필요하지 않은 것 같습니다.

Windows PC의 로컬 리포지토리를 네트워크 폴더에 매핑했습니다.

n:\folder

이것은 다음을 가리킵니다.

\windows-server\folder\working-folder

내가 하려고 했을 때

n:\folder> git status

다음과 같은 알려진 오류가 발생했습니다.

치명적: 안전하지 않은 저장소('//windows-server/folder/working-folder'는 다른 사람이 소유함)이 디렉터리에 대한 예외를 추가하려면 다음을 호출하십시오.

    git config --global --add safe.directory '%(prefix)///windows-server/folder/working-folder'

제 경우에는 파일 권한을 변경할 수 없었습니다.그래서 노력했습니다.

git config --global --add safe.directory '%(prefix)///windows-server/folder/working-folder'

하지만 이것은 효과가 없었습니다." "를 제거해야 했습니다!

솔루션:

git config --global --add safe.directory %(prefix)///windows-server/folder/working-folder

Android의 Termux에서 당신은 실제를 추가해야 합니다.gitdirectory.repo가 repo입니다.

git config --global --add safe.directory /storage/emulated/0/src/go2null-dotfiles

검사를 실행 중지할 수도 있습니다.

git config --global --add safe.directory '*'

아무도 없는 것 같으니 여기에 이것을 추가하는 것이 저에게 도움이 되었습니다.루트로 실행하여 이 시스템 전체를 설정할 수 있습니다.--system--global선택:

sudo git config --system --add safe.directory '*'

Visual Studio를 Administrator로 실행할 때도 있고 일반 사용자로 실행할 때도 있습니다.이것이 문제로 이어집니다.

증상 1

Visual Studio에서는 로컬 폴더를 열 때 코드가 더 이상 소스 제어에 추가되지 않은 것처럼 보입니다.

Visual Studio 2019에서 솔루션 열기:위의 메시지는 각 프로젝트의 Git 출력 창에 나타납니다.Visual Studio 2022에서 솔루션 열기:라고만 되어 있습니다.One or more errors occurred..

증상 2

의 부모 에서 일반 명령 를 열 때.git인 실행git log.

fatal: unsafe repository ('C:/GIT/MyProject' is owned by someone else)
To add an exception for this directory, call:

    git config --global --add safe.directory C:/GIT/MyProject

관리자 명령 프롬프트에서 명령을 실행할 때 오류가 발생하지 않습니다.

해결책

MyProject 폴더의 소유자를 일반 사용자로 변경합니다.이후에는 일반 사용자 및 관리자로서도 모든 작업이 정상적으로 수행됩니다.

Ubuntu 20.04(Focal Fossa)Laravel Forge(사용자 격리)에서:

이전 답변에서 권장한 대로 Git을 2.36으로 업데이트하려고 했지만, 이것은 작동하지 않았습니다.GitHub 솔루션을 사용해 보았습니다.

git config --global --add safe.directory GIT/MyProject

또한 이전 답변에서 권장한 바와 같습니다.

git config --global --add safe.directory '*'

이것들 중 어느 것도 저에게 효과가 없었습니다.

작동한 유일한 방법은 .git 폴더가 있는 상위 디렉터리와 프로젝트 디렉터리의 소유권이 Tc Blaize에서 설명한 것과 동일한 소유자인지 확인하는 것이었습니다.

Windows를 다시 설치하고 이전 시스템의 드라이브에서 리포지토리를 복사해야 했기 때문에 최근에 동일한 문제가 발생했습니다.

폴더의 보안 설정을 보면 "이전 사용자" ID(이전 창 시스템)가 설정되어 있음을 알 수 있습니다.새 시스템에서 이전 사용자를 알 수 없기 때문에 대화 상자에는 사용자의 SID만 표시됩니다.

폴더 우클릭 -> 속성 -> 보안 -> 고급

enter image description here

소유권을 실제 사용자로 변경한 후 모든 것이 다시 정상적으로 작동합니다.

enter image description here

하위 컨테이너 및 개체의 소유자 바꾸기를 선택하는 것을 잊지 마십시오.그렇지 않으면 실제 폴더(gitrepo 폴더)만 새 소유권을 갖게 됩니다.

내 경우 Ubuntu 20.04.4 시스템(Focal Fossa)에서 프로젝트 폴더의 소유권은 응용 프로그램 사용자(예: www-data:www-data)로 설정되었지만 시작할 때 .git 폴더의 소유권은 root:root로 설정되었습니다.

이 문제를 해결하기 위해 .git 폴더를 포함하여 프로젝트 폴더의 소유권을 root:root변경했습니다.그 후 모든 Git 동작이 정상적으로 작동하기 시작했습니다.

자동화의 일환으로 시나리오에서는 하나의 스크립트를 여러 번 호출하여 워크스페이스를 사전에 파악하지 못했습니다.

그래서, 우리의 경우에는,git config --global --add safe.directory *에 여러 .~/.gitconfig.

git config --global --replace-all safe.directory '*'중복 항목이 없도록 하는 데 도움이 되었습니다.

창문에서, 나는 이것을 사용합니다.

git config --global --add safe.directory *

또는

git config --global --replace-all safe.directory *

Windows(윈도우)에서는 높은 프롬프트에서 폴더를 만들면 관리자 그룹으로 설정된 소유자가 됩니다.

그런 다음 이 내부에서 승격되지 않은 프롬프트를 사용하여 리포지토리를 복제하면 소유자로 지정됩니다.새 Git 유효성 검사를 트리거하기에 충분합니다.

Windows 11과 WSL을 실행하고 있는데 소스 트리에서 이 오류가 발생했습니다.처음에는 WSL에서 명령을 실행하는 것과 소스 트리가 제안한 대로 인용문을 사용하는 것 두 가지 실수를 했습니다.C에서 cmd에서 실행한 후:\Users\alyssa 및 따옴표 없이 올바른 구문을 올바른 .gitconfig 파일에 넣고 있었습니다.

C:\Users\alyssa\.gitconfig:

[safe]
    directory = %(prefix)///wsl.localhost/Ubuntu/home/alyssa/my-repo

좋아요. 디렉터리가 소유하지 않거나 사용자의 홈 디렉터리 밖에 있는 이전 답변의 수프에 추가하려면 PowerShell을 조금 더 추가하고 누군가 이를 Bash로 변환할 수 있습니다. 그러면 디렉터리를 안전 목록에 추가할 수 있습니다.

아래 내용은 Windows에서 작성되었지만 Linux에서는 경로에 공백이 있는 경우 "-replace '\', "/'"를 제거합니다.

(ls D:\PowerShell\ParentFolder\ -Directory).FullName -replace '\\','/' | %{git config --global --add safe.directory $_}

이 문제는 Ubuntu 자동 패키지 업데이트 후에 발생합니다.로그 파일인 /var/log/apt/history.log의 업데이트를 확인한 후 두 개의 Git 패키지가 업데이트되었고 그 이후에 Fabricator와의 업데이트 날짜가 엉망이 되었습니다.

git
git-man

아래 두 가지 명령어를 사용하여 캐시에서 이전 버전을 확인하고 이전 버전을 설치했습니다.

apt-cache policy git:amd64

출력:

git:
  Installed: (none)
  Candidate: 1:2.17.1-1ubuntu0.10
  Version table:
     1:2.17.1-1ubuntu0.10 500
        500 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages
        500 http://archive.ubuntu.com/ubuntu bionic-security/main amd64 Packages
        100 /var/lib/dpkg/status
     ***1:2.17.0-1ubuntu1*** 500
        500 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages

sudo apt-get install git=1:2.17.0-1ubuntu1
apt-cache policy git-man:amd64

출력:

git-man:
  Installed: 1:2.17.1-1ubuntu0.10
  Candidate: 1:2.17.1-1ubuntu0.10
  Version table:
*** 1:2.17.1-1ubuntu0.10 500
        500 http://archive.ubuntu.com/ubuntu bionic-updates/main amd64 Packages
        500 http://archive.ubuntu.com/ubuntu bionic-security/main amd64 Packages
        100 /var/lib/dpkg/status
     1:2.17.0-1ubuntu1 500
        500 http://archive.ubuntu.com/ubuntu bionic/main amd64 Packages

sudo apt-get install git-man=1:2.17.0-1ubuntu1

git config --global --add safe.directory '*' //star meal all

모든 디렉토리를 안전하게 만들 수 있습니다.

.git/objects 권한을 수정하여 이 문제를 해결했습니다.우리는 실제로 잘못된 권한 때문에 sudo 없이 파일을 추가할 수 없었습니다.

저 같은 경우에는 메시지를 복사해서 sudo라고 쓰고 붙여넣기만 합니다.버튼을 누른 후 문제가 해결되었습니다.

예:

sudo git config --global --add safe.directory your-path

'your-path' = 메시지에 표시된 대로

언급URL : https://stackoverflow.com/questions/71849415/i-cannot-add-the-parent-directory-to-safe-directory-in-git

반응형