programing

git mv 및 디렉토리의 대소문자만 변경

powerit 2023. 5. 8. 22:29
반응형

git mv 및 디렉토리의 대소문자만 변경

비슷한 질문을 찾았지만 문제에 대한 답을 찾지 못했습니다.

디렉토리 이름을 FOO에서 Foo로 변경하려고 할 때git mv FOO foo알겠습니다

fatal: renaming 'FOO' failed: Invalid argument

네. 그래서 저는 노력합니다.git mv FOO foo2 && git mv foo2 foo

하지만 제가 약속을 하려고 할 때는git commit .알겠습니다

# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
# foo
nothing added to commit but untracked files present (use "git add" to track)

▁via때▁▁the가▁할▁i추를 통해 디렉토리를 할 수 있습니다.git add foo 않고 아것도변않고지하무,고않,git commit .다시 같은 메시지를 보냅니다.

내가 뭘 잘못하고 있는 거지?대소문자를 구분하는 시스템(OSX)을 사용하고 있다고 생각했습니다. 디렉토리 이름을 간단히 바꿀 수 없는 이유는 무엇입니까?

당신은 경우에 민감하지 않은 환경에 있습니다.또한, 다음을 제외하고 추가합니다.-A는 제거 처않습니다지리하부은의 것입니다.mvGit이 이해하는 바와 같이.경고! 이 작업을 수행할 때 다른 변경사항이나 추적되지 않은 파일이 없는지 확인하십시오. 그렇지 않으면 변경사항의 일부로 커밋됩니다. git stash -u에 먼저, 을것하고그다음에이그다▁first에음하▁this▁do고▁then.git stash pop이후. 계속:이 문제를 해결하려면 다음을 수행합니다.

mv foo foo2
git add -A
git commit -m "renaming"
mv foo2 FOO
git add -A
git commit --amend -m "renamed foo to FOO"

이것이 작업 디렉토리를 변경하고 커밋한 다음 두 커밋을 축소하는 도출된 방법입니다.인덱스에서 파일을 이동하기만 하면 되지만 처음 보는 사용자에게는 현재 진행 중인 작업에 대해 충분히 명시적이지 않을 수 있습니다.더 짧은 버전은.

git mv foo foo2
git mv foo2 FOO
git commit -m "changed case of dir"

중 interactive rebase)도 할 수 .git rebase -i HEAD~5전에 를 합니다.5 커 밋 를 전 잘 에 못 된 사 잘 사 어 합 도 않 다 니 록 나 도 에 지 나 타 디 기 우 경이때부터 커밋 해시가 달라지고 다른 사용자가 최근 지점의 과거와 작업을 다시 결합하거나 다시 결합해야 하므로 주의해야 합니다.

이는 파일 이름 수정과 관련이 있습니다.Git는 대소문자를 구분하지 않습니까?

을 .core.ignorecase거짓으로, 이는 Git가 기본적으로 지원하지 않는 파일 시스템의 사례에 주의를 기울이게 할 것입니다.레포에서 활성화하기

$ git config core.ignorecase false

그런 다음 파일 이름을 다음과 같이 변경할 수 있습니다.git mv예상대로 작동할 겁니다

임시 파일 이름을 사용하여 git 1.7.7을 사용하여 이 문제를 해결할 수 있었습니다.

$ git mv improper_Case improve_case2
$ git mv improve_case2 improve_case
$ git commit -m "<your message>"

(git mv variantfree variant.)

Giton Mac OS X 10.9에서 이 문제가 발생했습니다.저는 다음과 같이 해결했습니다.

git rm -r --cached /path/to/directory

Git에서 삭제를 위해 디렉토리를 준비하지만 실제 물리적 파일은 제거하지 않습니다.--cached이렇게 하면 디렉터리가 추적되지 않은 파일에 표시됩니다.

이렇게 할 수 있습니다.

mv /path/to/directory /path/to/DIRECTORY
git add -A /path/to/DIRECTORY

하고 파일 이름을 한 것을 인식합니다.git status당신은 많은 것을 봐야 합니다.renamed:라인을 검사하여 올바르게 표시되는지 확인하고, 올바르게 표시되면 변경 내용을 정상적으로 커밋할 수 있습니다.

이것은 빠르고 버그를 방지하는 솔루션입니다.

git mv -f path/to/foo/* path/to/FOO/

경고! 폴더의 (항상이사변폴더변모의이경파든름일(된) 사용)/*).

단일 파일의 이름을 바꾸지 마십시오.로 인해 다음 답변에 설명된 버그가 발생합니다.

먼결과보다사음용을다니합려면를저다사▁if니▁use용합▁first,▁outcome▁want▁you.-n:

git mv -f -n path/to/foo/* path/to/FOO/

에를 만든 mv:

  1. 변경사항 커밋
  2. 다른 개정판 체크아웃
  3. 체크아웃백.

Git는 내부 파일과 파일 시스템에서 폴더 이름을 모두 바꿨어야 합니다.

-f 옵션으로 강제 적용:

git mv -f FOO foo

저는 한 가지 관련된 문제가 있었습니다.

이름이 'Pro'(먼저 생성)인 폴더와 다른 'Pro'(실수로 생성)인 폴더가 있습니다.Mac에서는 동일하지만 git에 따라 다릅니다.

$ git config core.ignorecase false

git 구성은 파일 이름을 올바른 폴더로 변경하고(감사합니다), 'pro'(아니오!!)에 고스트 파일을 생성했습니다.저는 고스트 파일 변경 사항을 트랙에 추가할 수 없었고, 그 파일을 가지고 다니지 않으면 다른 지점을 체크아웃할 수 없었고, 어떻게든 리셋할 수 없었습니다.

대신에, 저는 했습니다.

$ git rm -r --cached pro
$ git status // => pro files removed, new Pro files untracked
$ git add Pro

그것을 더 안전하게 하기 위해, 나는 그것을 분리된 수정 브랜치에서 했고, 그리고 나는 다시 메인 브랜치로 병합했습니다.

에 의해 생성된 유령 파일 문제에 대해 구루가 어떻게 그리고 왜 설명할 수 있습니까?잘 부탁드립니다.

이것은 Windows에서 제게 아주 잘 작동했습니다.파워셸은 다음과 함께 사용됩니다.

  1. mv .\Folder-With-Wrong-Casing .\temp
  2. git add -A
  3. git commit -m "renamed folder with wrong casing to temp"
  4. mv .\temp .\Folder-with-Correct-Casing
  5. git add -A
  6. git commit --amend -m "Renamed to proper casing"
  7. (으)로 표시됨)git push

위의 아담의 답변 덕분입니다.

명시적으로 선택하지 않는 한 OS X에서 대소문자를 구분하는 파일 시스템을 사용하지 않습니다.HFS+는 대소문자를 구분할 수 있지만 기본값은 대소문자를 구분하지 않습니다.

여기 이 페이지의 모든 gitfoo에 대한 정말 간단한 해결책이 있습니다.

  1. 프로젝트에서 수동으로 파일을 복사합니다.
  2. 모든 파일을 gitm합니다.
  3. git commit 평소처럼.
  4. 파일을 수동으로 다시 추가합니다.
  5. git 모든 파일을 추가합니다.
  6. git commit 평소처럼.
  7. 이익.

여기 간단한 방법이 있습니다.

  1. 작업 디렉토리가 비어 있는지 확인합니다.

  2. Git ignore 사례 일시적으로 비활성화 안 함

git config core.ignorecase false
  1. 디렉토리 이름 변경(예: 폴더 => 폴더)
  2. 작업 디렉토리에 변경사항 추가
git add --all
  1. 변경사항을 저장합니다.
git stash
  1. 이제 원래 디렉터리를 삭제해야 합니다.로컬 커밋을 수행합니다.
git add --all
git commit -m "Rename directories"
  1. 팝업 변경사항
git stash pop
  1. 이전 커밋으로 수정합니다.
git add --all
git commit --amend
  1. 이제 디렉터리 이름이 변경된 커밋이 있어야 합니다.이제 원래 ignorecase 구성을 복원할 수 있습니다.
git config core.ignorecase true

"git mv"를 사용하면 Adam Dymitruk의 답변을 개선할 수 있습니다(SO가 답변을 코멘트하지 못하도록 함). 이동된 파일을 정확히 준비합니다.스태킹이 필요하지 않으며 위험한 "Git add -A"를 피할 수 있습니다.

old="abc";    new="ABC";
tmp="$old-renamed";
git mv "$old" "$tmp";
git commit -m "Renamed '$old' to '$tmp'.";
git mv "$tmp" "$new";
git commit --amend -m "Renamed '$old' to '$new'.";

언급URL : https://stackoverflow.com/questions/3011625/git-mv-and-only-change-case-of-directory

반응형