기존 폴더에“git clone”하는 가장 좋은 방법은 무엇입니까?
소스 제어 메타 데이터없이 프로젝트의 작업 사본이 있습니다. 이제이 폴더에 git-clone과 동등한 작업을 수행하고 로컬 변경 사항을 유지하고 싶습니다.
git-clone을 사용하면 기존 폴더로 복제 할 수 없습니다. 가장 좋은 방법은 무엇입니까?
새 디렉토리로 복제 한 다음 .git
디렉토리를 기존 디렉토리로 이동하면 됩니다.
기존 디렉토리의 이름이 "code"인 경우
git clone https://myrepo.com/git.git temp
mv temp/.git code/.git
rm -rf temp
또한 clone 명령 중에 체크 아웃하지 않고도 수행 할 수 있습니다. 자세한 내용은 여기를 참조하십시오 .
복제하지 말고 대신 가져 오십시오. 레포에서 :
git init
git remote add origin $url_of_clone_source
git fetch origin
git checkout -b master --track origin/master # origin/master is clone's default
그런 다음 트리를 재설정하여 원하는 커밋을 얻을 수 있습니다.
git reset origin/master # or whatever commit you think is proper...
그리고 당신은 당신이 복제 된 것과 같습니다.
여기서 흥미로운 질문 (그리고 답이없는 질문) : 벌거 벗은 나무가 어느 커밋을 기반으로했는지, 따라서 어떤 위치로 재설정하는지 찾는 방법.
기존 디렉토리에서 마스터 분기를 체크 아웃하기 위해 다음을 수행했습니다.
git init
git remote add origin [my-repo]
git fetch
git checkout origin/master -ft
나는 거라고 git clone
새로운 디렉토리에 새 복제에 기존 디렉토리의 내용을 복사합니다.
임시 디렉토리를 사용하는 것은 좋지만 해당 단계를 피하려는 경우 작동합니다. 작업 디렉토리의 루트에서 :
$ rm -fr .git
$ git init
$ git remote add origin your-git-url
$ git fetch
$ git reset --mixed origin/master
git clone your_repo tmp && mv tmp/.git . && rm -rf tmp && git reset --mixed
빈 저장소로 git repo를 복제하려면 다음을 수행하십시오.
cd myfolder
git clone https://myrepo.com/git.git .
주목 .
당신의 마지막 git clone
명령. 그러면 현재 작업 디렉토리에 저장소가 다운로드됩니다.
OP가 요청한 방식으로 이미 많은 답변을 받았습니다. 그러나 반대 방향으로 수행하는 것이 훨씬 간단하다는 점은 주목할 가치가 있습니다.
git clone repo-url tmp/
cp -R working/ tmp/
이제 원하는 대상 상태 (새 클론 + 로컬 변경)가 있습니다.
이에 대한 두 가지 접근 방식이 있습니다. 가능한 경우 새 git 작업 디렉토리의 깨끗한 폴더로 시작한 다음 나중에 버전을 복사합니다. 이것은 다음과 같이 보일 수 있습니다 * :
mv $dir $dir.orig
git clone $url $dir
rsync -av --delete --exclude '.git' $dir.orig/ $dir/
rm -rf $dir.orig
이 시점에서 이전 작업 폴더를 현재 작업 디렉토리로 사용하여 매우 깨끗한 작업 복사본을 가지고 있어야 변경 사항을 실행할 경우 변경 사항이 레이더에 표시됩니다 git status
.
반면에 실제로 다른 방법으로해야한다면 다음과 같은 결과를 얻을 수 있습니다.
cd $dir
git clone --no-checkout $url tempdir
mv tempdir/.git .
rmdir tempdir
git reset --mixed HEAD
어느 쪽이든, 내가 할 첫 번째 일은 git stash
모든 로컬 변경 사항을 따로 보관하는 것과 같이 실행하는 것입니다. 그런 다음 다시 적용하고 커밋하려는 변경 사항을 적용 할 수 있습니다.
* 두 예제 모두 프로젝트의 상위 디렉토리에있는 쉘에서 시작한다고 가정합니다.
이것은 내가 만난 모든 방법 중 최고입니다.
저장소의 .git 폴더 (이미있는 파일 제외 existing-dir
) 만 빈 임시 디렉토리로 복제하십시오.
git clone --no-checkout repo-path-to-clone existing-dir/existing-dir.tmp
// 로컬 리포지토리 복제를위한 --no-hardlinks
.git 폴더를 파일이있는 디렉토리로 이동하십시오. 이것은 existing-dir
자식 저장소를 만듭니다 .
mv existing-dir/existing-dir.tmp/.git existing-dir/
임시 디렉토리를 삭제하십시오.
rmdir existing-dir/existing-dir.tmp
cd existing-dir
Git은 모든 파일이 삭제되었다고 생각합니다. 이렇게하면 저장소의 상태가 HEAD로 되돌아갑니다.
경고 : 파일에 대한 로컬 변경 사항이 손실됩니다.
git reset --mixed HEAD
당신이 (가르쳐 적어도 자식 1.7.7 사용하는 경우 옵션), 작업 사본에 현재 디렉토리를 설정합니다 :clone
--config
git clone example.com/my.git ./.git --mirror --config core.bare=false
이것은 다음에 의해 작동합니다.
- 저장소를 새
.git
폴더 로 복제 --mirror
같은 순수 메타 데이터 폴더에 새 복제를 만드는.git
필요로--config core.bare=false
암시 적 countermandsbare=true
의--mirror
하여 저장소 관련 작업 디렉토리를 가지고 정상적인 복제처럼 행동 할 수 있도록 옵션
.git
메타 데이터 디렉토리가 이미 작업 사본으로 바꾸려는 디렉토리에 존재 하는 경우에는 작동하지 않습니다 .
일반적으로 초기 저장소를 먼저 복제 한 다음 기존 폴더의 모든 항목을 초기 저장소로 이동합니다. 매번 작동합니다.
이 방법의 장점은 README 또는 .gitignore를 포함하여 초기 저장소가 누락되지 않는다는 것입니다.
아래 명령을 사용하여 단계를 완료 할 수도 있습니다.
$ git clone https://github.com/your_repo.git && mv existing_folder/* your_repo
'Programing' 카테고리의 다른 글
Ruby의 이중 콜론`::`은 무엇입니까? (0) | 2020.02.21 |
---|---|
앞으로 사용의 장점 (0) | 2020.02.21 |
iOS DeviceSupport에서 데이터를 삭제할 수 있습니까? (0) | 2020.02.21 |
콘솔 앱의 '메인'메소드에서 '비동기'수정자를 지정할 수 없습니다. (0) | 2020.02.21 |
언제 추상 클래스 대신 인터페이스를 사용해야합니까? (0) | 2020.02.21 |