내 Git 저장소가 잘못된 루트 디렉토리에 있습니다. 움직일 수 있습니까? (../ 대신에 ./)
어떻게 든 git init
한 달 정도 전에 최신 프로젝트를 수행 했을 때 프로젝트의 루트보다 한 디렉토리 높은 디렉토리에서 명령을 실행했습니다.
따라서 내 저장소는 ./project
디렉토리가 아닌 ./project/my-new-project
디렉토리에 있습니다. 이전에 문제를 어떻게 알지 못했는지 모르겠지만 지금까지는 .git 디렉토리를 찾지 못했습니다.
내 프로젝트를 죽이지 않고 저장소를 적절한 디렉토리로 옮긴 다음 git에게 프로젝트의 새로운 기반이 무엇인지 알려주는 방법이 있습니까? 디렉토리를 옮기는 것만으로는 작동하지 않습니다. Git은 모든 파일이 삭제되었다고 생각합니다.
저장하려는 일부 히스토리를 이미 작성하지 않은 경우 가장 간단한 방법은 .git
서브 디렉토리를 삭제 하고 올바른 디렉토리에서 초기화를 다시 실행하는 것입니다.
git을 사용하여 문제를 해결했다면 어떤 솔루션이든 실제로 변경되지 않은 많은 "이 파일을 여기로 옮겼습니다"라는 기록 항목을 남겨 두어야하지만 작성시 스크류 업을 수정해야합니다. 바로 만드는 것이 좋습니다.
나는 반대의 문제가 있었다-git root를 부모 디렉토리 (project / src에서 project로)로 옮겨야했다.
src$ mv .git ../
src$ cd ..
project$ git add src
project$ git commit -a
자식은 모든 새로운 파일의 이름이 이전 파일의 버전으로 바뀌었고 기록이 손실되지 않았다는 것을 영리하게 감지했습니다
비슷한 것을 시도해 볼 수 있습니다 ... 커밋하기 전에 .git 폴더를 이동하고 파일을 다시 추가하십시오.
이것은 나를 위해 일했고 내 역사를 그대로 유지했습니다. 잘못된 루트 폴더 (실수로 저장소를 초기화 한 상위 폴더)에서 :
폴더를 이동하십시오.
mv .git thecorrectfolder/
git repo를 다시 초기화하십시오.
cd thecorrectfolder/
git init
모든 파일을 다시 추가하고 커밋하고 푸시하십시오.
git add .
git commit -am 'fixing things'
git push origin master
끝난! 맥주 마셔
다시 초기화 한 후 git repo를 커밋하면 다음과 같은 출력이 나타납니다.
rename {ethanode/coffee => coffee}/app.coffee (100%)
즉, 상위 폴더에서 참조하고 올바른 폴더를 사용하도록 이름을 바꾸는 모든 참조입니다.
git filter-branch
그런 식으로 기록을 다시 쓸 수 있습니다. git filter-branch
매뉴얼 페이지 도 사건이 예로을 :
foodir /가 프로젝트 루트 인 것처럼 보이도록 저장소를 다시 작성하고 다른 모든 히스토리를 삭제하려면 다음을 수행하십시오.
git filter-branch --subdirectory-filter foodir -- --all
아마도 실행 git clone
하기 전에 (또는 후에?) 새로운 하위 디렉토리로 리포지토리를 원할 것입니다 git filter-branch
. (필터 브랜치 전에 복제하고 새 클론에서 필터 브랜치를 실행하면 문제가 발생하는 경우 원래 .git/
디렉토리를 백업으로 유지하는 이점이 있습니다 .)
힘내는 해시 파일을 기억할 수 있습니다.
.git
루트 디렉토리 로 이동 git
하고 --all
옵션으로 모든 파일 변경 사항을 기억하도록 지시하십시오 .
$ mv .git ../
$ cd ..
$ git add . --all
$ git status // => you can see all the files recognized as renamed 100%
$ git commit -m "Moves repo to root directory."
사용 git-mv
, 적절한 위치에 "최대"다음 파일을 이동 git-rm
"내 새로운 프로젝트"디렉토리를.
나는 저장소를 어디든 이동할 수있는 방법을 찾기 위해 여기에왔다 .
내가 유일한 사람이 아닌 경우, 여기 내가 한 일이 있습니다.
https://git.wiki.kernel.org/index.php/GitFaq#How_do_I_clone_a_repository_with_all_remotely_tracked_branches.3F 나는 "git clone --mirror"다 레포 사본을 복사 한 후 더 이상 노출되지 않도록 파일을 표시했습니다. 새 폴더에 (그런 다음에 파일과 로그가 나타나는지 확인했습니다.) 만일의 경우를 위해, 오래된 레포를 잠시 동안 유지했습니다.
그렇게하면 역사를 잃지 않고 레포를 움직일 수있었습니다.
인사말, 디나
이 같은 문제를 겪은 후 최종 해결책은 다음과 같습니다.
- .git 폴더를 필요한 곳으로 옮깁니다.
- 방금 .git을 이동 한 폴더로 디렉토리를 변경하십시오.
- 폴더 내용을 git이 생각하는 것으로 재설정하십시오.
git reset --hard HEAD
- kdiff3 또는 다른 비교 도구와 내용이 일치하는지 확인하십시오
- 이전 위치에서 현재 버전이없는 파일을 삭제하십시오.
It worked like magic with no impact on the history. - N.B. If you have made some changes be sure to commit them before the move of the .git directory.
There are two ways here:
cd TheWrongDirectory rm -rf .git
just DELETE the .git folder and cd to the right directory.
'IT story' 카테고리의 다른 글
술어를 사용하여 시퀀스를 두 조각으로 나누는 방법은 무엇입니까? (0) | 2020.07.28 |
---|---|
MVC 웹 API : 요청 된 자원에 'Access-Control-Allow-Origin'헤더가 없습니다. (0) | 2020.07.28 |
일부 Git 저장소에서 Git 저장소의 이름을 어떻게 얻습니까? (0) | 2020.07.28 |
파이썬은 여러 변수를 같은 값으로 할당합니까? (0) | 2020.07.28 |
빌드 도구 개정판 23.0.1을 찾지 못했습니다. (0) | 2020.07.28 |