내 Git 저장소가 잘못된 루트 디렉토리에 있습니다. 이동할 수 있습니까? (../ 대신에 ./)


118

어떻게 든 git init한 달 정도 전에 최신 프로젝트를 수행 했을 때 프로젝트의 루트보다 한 디렉토리 높은 디렉토리에서 명령을 실행했습니다.

그래서 내 저장소는 ./project디렉토리가 아니라 ./project/my-new-project디렉토리에 있습니다. 이전에이 문제를 어떻게 깨닫지 못했는지는 모르겠지만 지금까지 .git 디렉토리를 찾지 못했습니다.

내 프로젝트를 죽이지 않고 저장소를 적절한 디렉토리로 이동 한 다음 git에게 프로젝트의 새로운 기반이 무엇인지 알려주는 방법이 있습니까? 디렉토리 이동만으로는 작동하지 않습니다. Git은 모든 파일이 삭제되었다고 생각합니다.

답변:


19

저장하려는 히스토리를 이미 작성하지 않은 경우 가장 간단한 방법은 .git하위 디렉토리를 삭제 하고 올바른 디렉토리에서 초기화를 다시 실행하는 것입니다.

git을 사용하여 문제를 해결했다면 어떤 솔루션이든 실제로 변경되지 않은 많은 "이 파일을 여기로 이동"기록 항목을 남길 수 있지만 생성시 문제를 해결해야합니다. 제대로 만드는 것이 좋습니다.


2
나는 당신이 말하는 것을 알지만, 이것을 수정하기 위해 당신이하는 모든 in-git 액션은 실제로 변경되지 않은 "이 파일을 여기로 이동"한 기록을 남기게 될 것입니다. 제대로 만드는 것이 좋습니다.
TED

8
이것은 많은 것을 깨뜨립니다. stackoverflow.com/a/3247756/825364 가 훨씬 더 나은 방법입니다.
Steve Tauber

2
글쎄, 일부 기록을 저장하는 것은 Git이 사용되는 것입니다. .git 하위 디렉토리를 삭제하고 시스템에서 Git을 제거해야할까요? vcs 대신 ftp-server를 사용하는 것이 아마도 가장 간단한 방법 일 것입니다!
Gherman 2015

2
이 모든 역사를 보유하고 있기 때문에 아래의 대답은 훨씬 더 나은 방법입니다
BigMikeW

2
그래서 저는 이것을했고 즉시 제 실수를 깨달았습니다. 걱정할 변경 사항없이 깨끗한 상태로 돌아가는 가장 쉬운 방법입니다.
Mike

261

나는 반대의 문제가 있었다-git 루트를 부모 디렉토리로 옮겨야했다 (프로젝트 / src에서 프로젝트로). 놀랍게도, 다음이 효과가 있었다!

src$ mv .git ../ 
src$ cd ..
project$ git add src
project$ git commit -a

git은 모든 새 파일이 이전 버전의 이름이 바뀌었고 기록이 손실되지 않았 음을 영리하게 감지했습니다.

비슷한 것을 시도해 볼 수 있습니다 ... .git 폴더를 이동하고 커밋하기 전에 파일을 다시 추가하십시오.


8
이것은 나를 위해 완벽하게 작동했습니다. 또한 .gitigore
Relequestual

7
친애하는 선생님, 당신은 생명의 구세주입니다. 이것은 정말로 작동합니다. 감사합니다.
Radu Murzea

1
또한 git rm'd이전 위치의 파일이므로 git status(올바르게) 많은 이름 바꾸기 작업을보고했습니다. git과 더 많이 작업할수록 더 좋아합니다.
ssc

7
@Mike 이것은 수락 된 답변으로 표시되어야합니다. 기록을 잃지 않기 때문에 다시 초기화하는 데 선호되는 솔루션입니다. 저를 믿지 않는다면, 찬성 수는 그 자체로 말합니다.
Joseph Spens 2014 년

3
감사합니다! 저에게는 효과가 있었지만 몇 가지 작업을 더해야했습니다. 1. 커밋하기 전에 루트 폴더에서 업데이트 .gitignore하고 실행 git add -A했습니다. 이 후, 자식이 제대로 모든 파일을 보여 주었다 renamed보다는 deleted. 2. 서브 모듈을 사용 .gitmodules하기 때문에 새로운 루트 로 이동 하고 다양한 git 구성 파일에서 서브 모듈 경로를 업데이트해야했습니다. 수정할 파일을 찾기 위해 실행grep -nrI --color 'old/path/to/submodule' .
Guido Walter Pettinari 2011

43

이것은 나를 위해 일했으며 모든 역사를 그대로 유지했습니다. 잘못된 루트 폴더 (실수로 저장소를 초기화 한 상위 폴더)에서 :

폴더 이동 :

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%)

즉, 상위 폴더의 모든 참조가 올바른 폴더를 사용하도록 이름이 변경되었습니다.


감사! 이 방법은 정확히 내가 필요했던 것입니다!
Giel Berkers 2014 년

이것은 나를 위해 일했지만 약간 못 생겼습니다. git에 관한 한, 나는 아무것도 '이동'하지 않고 수백 개의 파일을 삭제 한 다음 수백 개의 다른 동일한 파일을 추가했습니다.
bjmc 2014 년

6
git init는 필요하지 않으며 나머지 부분은 몇 년 전에 제출 된 내 답변과 동일합니다. stackoverflow.com/a/3247756/391753
Abhishek Anand

35

git filter-branch그런 식으로 역사를 다시 쓸 수 있습니다. git filter-branch매뉴얼 페이지 도 사건이 예로을 :

foodir /이 프로젝트 루트 인 것처럼 보이도록 저장소를 다시 작성하고 다른 모든 기록을 삭제하려면 :

git filter-branch --subdirectory-filter foodir -- --all

당신은 아마 원하는 git clone전에 새로운 서브 디렉토리로 REPO (또는 이후?)를 git filter-branch실행합니다. (필터 브랜치 전에 복제하고 새 클론에서 필터 브랜치를 실행하면 .git/문제가 발생할 경우 백업으로 원래 디렉토리 를 그대로 두는 이점이 있습니다 .)


1
이것은 "다른 모든 기록을 폐기"하지 않습니다 ( .git하위 디렉토리가 "루트로 간주"되는 동안 리포지토리가 최상위 수준에 머무르는 것을 제안 ). 이것은 말 그대로 리포지토리의 다른 모든 파일을 삭제하고 모든 subdirectory/*파일을 루트 폴더 로 이동 합니다. .
Louis Maddox 2015

좋은 대답이지만 .gitignore 파일 (추적 된 경우)이있는 경우이 작업으로 손실됩니다. 또한 git push --force이 후에 업스트림 저장소를 업데이트하려면 a 를 수행해야합니다 .
waldyrious

12

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."

3

사용 git-mv, 적절한 위치에 "최대"다음 파일을 이동 git-rm"내 새로운 프로젝트"디렉토리를.


그 반대입니다. 나는 모든 파일을 git이있는 디렉토리로 옮기고 싶지 않다. 저장소를 프로젝트의 루트 디렉토리로 이동하고 싶습니다.
Mike

2

내 저장소를 어디로 든 이동할 수있는 방법을 찾기 위해 여기에 왔습니다 .

내가 유일한 사람이 아니라면 결국 내가 한 일은 다음과 같습니다.

https://git.wiki.kernel.org/index.php/GitFaq#How_do_I_clone_a_repository_with_all_remotely_tracked_branches.3F 난 "git clone --mirror"가 내 저장소의 베어 사본이고 나중에 더 이상 베어가 아니라고 말 했으므로 파일이 나타났습니다. 그 새 폴더에. (그런 다음 파일과 로그가 나타나는지 확인했습니다.) 만일을 대비하여 잠시 동안 오래된 저장소를 보관했습니다.

이렇게하면 기록을 잃지 않고 내 저장소를 이동할 수있었습니다.

최고의 인사, Dinah


내가 틀렸다면 저를 정정하십시오.하지만 mv /path/to/the/old/location/of/the/repo /path/to/the/new/location/of/the/repo.
cueedee

2

이 같은 문제를 막 겪은 내 최종 해결책은 다음과 같습니다.

  1. .git 폴더를 필요한 위치로 이동하십시오.
  2. 방금 .git을 이동 한 폴더로 디렉토리를 변경하십시오.
  3. 폴더 내용을 git이 생각하는대로 재설정합니다. git reset --hard HEAD
  4. 내용이 kdiff3 또는 다른 비교 도구와 일치하는지 확인하십시오.
  5. 이전 위치에서 현재 버전이 지정되지 않은 파일을 삭제하십시오.

그것은 역사에 영향을 미치지 않고 마술처럼 작동했습니다. - NB는 당신이 한 경우 약간의 변화는 .git 디렉토리의 이동 전에 그들을 저지해야합니다.


-3

여기에는 두 가지 방법이 있습니다.

  1. cd TheWrongDirectory rm -rf .git

  2. .git 폴더를 삭제하고 올바른 디렉토리로 cd하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.