비슷한 질문 을했지만 내 문제에 대한 답을 찾지 못했습니다
내가 디렉토리를 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)
git add foo
아무것도 변경하지 않고 디렉토리를 추가하면 git commit .
동일한 메시지가 다시 나타납니다.
내가 뭘 잘못하고 있죠? 대소 문자 구분 시스템 (OSX)을 사용하고 있다고 생각했는데 왜 단순히 디렉토리 이름을 바꿀 수 없습니까?
답변
대소 문자를 구분하지 않는 환경에 있습니다. 또한 Git이 이해 -A
하는 mv
것처럼 제거 기능을 추가 하지 않아도 제거 측면을 처리하지 않습니다 . 경고! 이 작업을 수행 할 때 다른 변경 사항이나 추적되지 않은 파일이 없는지 확인하십시오. 그렇지 않으면이 변경 사항의 일부로 커밋됩니다. git stash -u
먼저이 작업을 수행 한 다음 수행하십시오 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을 처음 접하는 사람에게는 무슨 일이 일어나고 있는지 명확하지 않을 수 있습니다. 더 짧은 버전은
git mv foo foo2
git mv foo2 FOO
git commit -m "changed case of dir"
의견 중 하나에서 제안한 것처럼 대화 형 리베이스 ( git rebase -i HEAD~5
잘못된 커밋이 5 커밋 전에 도입 된 경우)를 수행하여 사례를 수정하고 히스토리의 어느 곳에도 잘못된 케이스가 나타나지 않도록 할 수 있습니다. 커밋 해시가 다르고 다른 사람들이 최근의 지사와 함께 작업을 리베이스하거나 다시 병합해야하기 때문에이 작업을 수행하면주의해야합니다.
이것은 파일 이름 수정과 관련이 있습니다 : git은 대소 문자를 구분하지 않습니까?
답변
옵션 core.ignorecase
을 false 로 설정하려고 하면 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
무료 변형)
Mac OS X 10.9의 Git 에서이 문제가 발생했습니다. 나는 다음과 같이 해결했다.
git rm -r --cached /path/to/directory
Git에서 삭제할 디렉토리를 준비하지만 실제로 실제 파일을 제거하지는 않습니다 ( --cached
). 또한 적절한 경우 디렉토리가 추적되지 않은 파일에 표시됩니다.
그래서 당신은 이것을 할 수 있습니다 :
mv /path/to/directory /path/to/DIRECTORY
git add -A /path/to/DIRECTORY
그런 다음 Git은 파일 이름을 변경했음을 인식 git status
하고 여러 renamed:
줄을 보게 됩니다. 그것들을 검사하고 그것들이 올바르게 보이는지 확인하고, 그렇다면 정상적으로 변경 사항을 커밋 할 수 있습니다.
답변
빠르고 안전합니다.
git mv -f path/to/foo/* path/to/FOO/
경고! 이름이 바뀐 폴더에있는 모든 파일의 이름을 항상 바꿉니다 (사용 /*
).
단일 파일의 이름을 바꾸지 마십시오. 이것은이 답변에 설명 된 버그로 이어집니다 .
먼저 결과를 먼저 보려면 다음을 사용하십시오 -n
.
git mv -f -n path/to/foo/* path/to/FOO/
당신이 만든 후 mv
:
- 커밋 변경
- 다른 개정에 대한 체크 아웃
- 다시 확인하십시오.
이제 Git은 내부 파일과 파일 시스템에서 BOTH 폴더의 이름을 변경해야합니다.
답변
-f 옵션으로 강제 실행하십시오.
git mv -f FOO foo
답변
하나의 관련 문제가있었습니다.
하나의 폴더는 ‘Pro'(처음 생성됨)이고 다른 하나는 ‘pro'(실수로 생성됨)입니다. Mac에서는 똑같지 만 git에 따라 다릅니다.
$ git config core.ignorecase false
git config는 파일의 이름을 오른쪽 폴더 (감사)로 바꾸고 ‘pro'(No !!)에 고스트 파일을 만들었습니다. 나는 고스트 파일 변경 사항을 트랙에 추가 할 수 없었고 그 파일을 나와 함께 가지고 다니지 않으면 다른 지점을 체크 아웃 할 수 없었으며 어떻게 든 재설정 할 수 없었습니다.
그 대신에, 나는했다
$ git rm -r --cached pro
$ git status // => pro files removed, new Pro files untracked
$ git add Pro
추가 안전을 위해 별도의 수정 지점에서 수행 한 다음 기본 지점으로 다시 병합했습니다.
님이 만든 고스트 파일 문제에 대해 전문가가 방법과 이유를 설명 할 수 있습니까? 미리 감사드립니다.