git 저장소를 다른 디렉토리로 이동하고 해당 디렉토리를 git 저장소로 만드는 방법은 무엇입니까?


101

gitrepo1 디렉토리가 있습니다 . 이 디렉토리는 git 저장소입니다.

  • gitrepo1 을 다른 디렉토리 newrepo 로 옮기고 싶습니다 .

  • newrepo 디렉토리 는 git 기록 손실이없는 새 git 저장소 여야하며 gitrepo1 디렉토리를 포함해야합니다 .

  • gitrepo1 디렉토리 는 색인이 없는 디렉토리 ( newrepo 내부 ) .git여야합니다. 즉, 더 이상 독립적 인 git 저장소 또는 하위 모듈이 아니어야합니다.

어떻게 할 수 있습니까?


9
mv girepo1 newrepo??
ddavison 2013 년

답변:


110

아주 간단합니다. Git은 디렉토리 이름이 무엇인지 신경 쓰지 않습니다. 안에있는 것만 신경 쓰죠. 따라서 간단하게 다음을 수행 할 수 있습니다.

# copy the directory into newrepo dir that exists already (else create it)
$ cp -r gitrepo1 newrepo

# remove .git from old repo to delete all history and anything git from it
$ rm -rf gitrepo1/.git

저장소가 크고 기록이 긴 경우 복사본이 상당히 비쌉니다. 쉽게 피할 수 있습니다.

# move the directory instead
$ mv gitrepo1 newrepo

# make a copy of the latest version
# Either:
$ mkdir gitrepo1; cp -r newrepo/* gitrepo1/  # doesn't copy .gitignore (and other hidden files)

# Or:
$ git clone --depth 1 newrepo gitrepo1; rm -rf gitrepo1/.git

# Or (look further here: http://stackoverflow.com/q/1209999/912144)
$ git archive --format=tar --remote=<repository URL> HEAD | tar xf -

를 만든 후에는 원하는 경우 안에 newrepo넣을 gitrepo1수 있습니다 newrepo. 절차를 변경하지 않고 gitrepo1다시 작성하는 경로 만 변경합니다 .


6
+1. git 버전 1.7.8 또는 1.7.9로 생성 된 리포지토리에 영향을 미치는 이 문제를 언급 할 가치가 있습니다. 즉 , git 리포지토리를 이동하면 사용할 수 없게 될 수 있습니다 (표시된대로 쉽게 수정할 수 있음).
AD7six 2013 년

1
나는 wndows 컴퓨터에 있으며 명령 프롬프트를 사용하고 있습니다. "cp"명령을 찾을 수 없습니다. "cp"명령은 다른 OS에 고유합니까?
LP13

1
@ user3862378, cp거의 모든 명령이나 기능과 마찬가지로 다른 OS에 고유합니다. 실제로 Windows가 아닌 모든 OS에 적용됩니다. Microsoft에 전화하여 POSIX가 아닌 이유를 물어보십시오. 어쨌든 cp복사를 의미합니다. mv이동을 의미합니다. rm제거를 의미합니다. Windows에 해당하는 항목을 찾을 수 있습니다.
Shahbaz 2015

@Shahbaz 감사합니다. 위의 솔루션은 "newrepo->. git"및 "newrepo-> gitrepo1의 다른 모든 파일"구조를 생성합니다. "newrepo"폴더에 "gitrepo1"폴더를 넣지 않습니다. Windows에서 수동으로 폴더를 만들고 루트 폴더 아래의 ".git"폴더를 이동하면 기록에 영향을주지 않고 작동합니까?
LP13

2
@ user3862378, 그럴 이유가 없습니다. .git/최신 커밋을 포함한 모든 기록을 포함합니다. 어디에 두든 모든 역사가 있습니다. 실제로 해당 디렉토리의 모든 파일이 가져온 원본 저장소와 다른 .git/경우 유일한 파일은 일부 파일이 삭제되고 일부는 추적되지 않은 파일이 있음을 알려주는 것입니다. 를 사용 git reset --hard하면 제거 된 파일이 자동으로 복구됩니다! 주의 할 점은 복사만으로는 .git/커밋되지 않은 변경 사항을 복구 할 수 없다는 것입니다.
Shahbaz

4

조금 늦었고 질문은 이미 답변되었지만 두통없이 수행하려면 :

  1. 와 이전 자식 폴더의 현재 지점 당신이 무엇을 확인 git status하자의는 분기 말 개발
  2. 디렉토리를 새 git 폴더로 변경 한 다음 git clone프로젝트를 repo에서 새 폴더로 변경합니다.
  3. 새 폴더에서 현재 분기를 확인하십시오. git checkout development
  4. 사용하여 이전 한 개 새 폴더를 Syncronize rsync, .git 폴더를 제외 :rsync -azv --exclude '.git' gitrepo1 newrepo/gitrepo1

그런 다음 중단 한 부분을 계속하는 것이 좋습니다.


2

그것보다 훨씬 간단합니다. 방금 한 작업입니다 (Windows에서는 작동하지만 다른 OS에서는 작동해야 함).

  1. newrepo를 만듭니다 .
  2. gitrepo1newrepo 로 이동합니다 .
  3. .gitgitrepo1 에서 newrepo로 이동 합니다 (한 수준 위로).
  4. 변경 사항을 커밋합니다 (필요에 따라 추적 수정).

Git은 디렉토리를 추가하고 여러 파일의 이름을 변경 한 것을 확인합니다. 별거 아니야.


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