Programing

비어 있지 않은 디렉토리로 어떻게 복제합니까?

lottogame 2020. 2. 10. 22:00
반응형

비어 있지 않은 디렉토리로 어떻게 복제합니까?


디렉토리 A와 디렉토리 B가 일치하는 파일이 있습니다. 디렉토리 A에 다른 필요한 파일이있을 수 있습니다. 디렉토리 B는 자식 저장소입니다.

디렉토리 B를 디렉토리 A로 복제하고 싶지만 디렉토리가 비어 있지 않기 때문에 git-clone에서 허용하지 않습니다.

나는 그것이 .git을 복제하고 모든 파일이 일치하기 때문에 거기에서 갈 수 있기를 바랐다.

디렉토리 A에 디렉토리 B에없는 파일이 있고이를 유지하려고하므로 빈 디렉토리로 복제 할 수 없습니다.

참조를 푸시 / 풀하기를 원하고 수동으로 설정하고 싶지 않기 때문에 .git 복사는 옵션이 아닙니다.

이것을 할 수있는 방법이 있습니까?

업데이트 : 이것이 효과가 있다고 생각합니다. 누구든지 문제를 볼 수 있습니까? ->

cd a
git clone --no-hardlinks --no-checkout ../b a.tmp 
mv a.tmp/.git .
rm -rf a.tmp
git unstage # apparently git thinks all the files are deleted if you don't do this

이것은 나를 위해 일했다 :

git init
git remote add origin PATH/TO/REPO
git fetch
git reset origin/master  # Required when the versioned files existed in path before "git init" of this repo.
git checkout -t origin/master

참고 : -t 원하는 경우 업스트림 분기를 설정하고 일반적으로 수행합니다.


다음 쉘 명령 existing-dir에는 내용이 repo-to-clonegit 저장소 의 추적 된 파일과 일치하는 디렉토리가 있습니다 .

# Clone just the repository's .git folder (excluding files as they are already in
# `existing-dir`) into an empty temporary directory
git clone --no-checkout repo-to-clone existing-dir/existing-dir.tmp # might want --no-hardlinks for cloning local repo

# Move the .git folder to the directory with the files.
# This makes `existing-dir` a git repo.
mv existing-dir/existing-dir.tmp/.git existing-dir/

# Delete the temporary directory
rmdir existing-dir/existing-dir.tmp
cd existing-dir

# git thinks all files are deleted, this reverts the state of the repo to HEAD.
# WARNING: any local changes to the files will be lost.
git reset --hard HEAD

나를 위해 일한 답변 중 하나를 약간 수정했습니다.

git init
git remote add origin PATH/TO/REPO
git pull origin master

마스터 브랜치에서 바로 작업을 시작합니다.


다음은 동일한 문제가 발생했을 때 수행 한 결과입니다 (적어도 동일한 문제라고 생각합니다). 나는 디렉토리 A에 들어가서 달렸다 git init.

디렉토리 A의 파일 뒤에 git이 필요하지 않기 때문에 .gitignore를 편집하고 기존 파일을 추가했습니다. 이 후에 내가 git remote add origin '<url>' && git pull origin mastervoila를 실행 하면 B는 단일 딸꾹질없이 A에 "복제"됩니다.


git init 

git remote add origin PATH/TO/REPO 

git fetch 

git checkout -t origin/master -f

@ cmcginty의 답변 에서 수정되었습니다 --f 없이는 저에게 효과가 없었습니다.


이것은 나를 위해 일했다 :

cd existing_folder
git init
git remote add origin path_to_your_repo.git
git add .
git commit
git push -u origin master

또 다른 간단한 요리법이 나를 위해 잘 작동하는 것 같습니다.

git clone --bare $URL .git
git config core.bare false

기존 파일이있는 디렉토리를 체크 아웃하는 주요 사용 사례는 Git을 사용하여 Unix 도트 파일을 제어하는 ​​것입니다. 새 계정에서 홈 디렉토리에는 이미 Git에서 가져오고 싶은 파일이 있습니다.


몇 분 전에 이것을 사용했으며 잠재적으로 가장 파괴적인 명령이 필요합니다.

cd existing-dir
git clone --bare repo-to-clone .git
git config --unset core.bare
git reset

그리고 voilá!


어쩌면 내가 질문을 오해,하지만 당신은 자식의 repo A에서 B로 파일을 이동에 필요한 것들을 추가 / 복사 할 경우 그것은 간단하지 않을 것입니다 자식 추가 ?

업데이트 : 자식 문서에서 :

기존 디렉토리로의 복제는 디렉토리가 비어있는 경우에만 허용됩니다.

출처 : http://git-scm.com/docs/git-clone


나는 비슷한 것을 찾고 있었고, 내가 생각해 낸 것은 다음과 같습니다.

내 상황은 활성 웹 트리가 있고 현재 웹 트리의 파일을 이동하지 않고 원격 저장소를 만들려고했습니다. 내가 한 일은 다음과 같습니다.

  1. 웹 트리로 이동하여 실행 git init
  2. 저장소의 원하는 위치로 이동하여 다음을 실행하십시오. git clone --bare /path/to/web/repo
  3. 내 원격 저장소에서 구성 파일을 편집하고 [remote "origin"]섹션을 제거 하십시오.
  4. [remote "origin"]웹 트리에서 새 원격 저장소를 가리키는 섹션을 .git / config에 추가하십시오 .

이것은 저에게 효과적이지만 원격 저장소 파일을 로컬 파일에 병합해야합니다.

git init
git remote add origin url-to-git
git branch --set-upstream-to=origin/master master
git fetch
git status

내가하고있는 일은 다음과 같습니다.

git clone repo /tmp/folder
cp -rf /tmp/folder/.git /dest/folder/
cd /dest/folder
git checkout -f master

준비 웹 서버로 사용할 새 Apache 웹 디렉터리 (WHM으로 만든 계정)와 비슷한 문제가있었습니다. 처음에는 코드 기반으로 새 프로젝트를 복제하고 저장소에서 가져와 변경 사항을 주기적으로 배포해야했습니다.

문제는 계정에 이미 다음과 같은 웹 서버 파일이 포함되어 있다는 것입니다.

.bash_history
.bash_logout
.bash_profile
.bashrc
.contactemail
.cpanel/
...

... 저장소를 삭제하거나 커밋하고 싶지 않습니다. 나는 그들이 무대에 있고 추적되지 않은 채 머물 필요가있었습니다.

제가 한:

내 웹 폴더 (existing_folder)로 이동했습니다.

cd /home/existing_folder

그리고:

git init
git remote add origin PATH/TO/REPO
git pull origin master
git status

cPanel 웹 계정에서 초기에 존재했던 많은 준비되지 않은 파일 목록이 예상대로 표시되었습니다.

그런 다음 이 기사 덕분 에 해당 파일 목록을 다음에 추가했습니다.

**.git/info/exclude**

파일과 거의 비슷한이 .gitignore파일을 사용하면 파일이 준비되지 않도록 무시할 수 있습니다. 이 후 나는 .git / 디렉토리에 커밋 .gitignore할 것이 없었습니다. 다른 사람이 볼 수없는 개인처럼 작동합니다 .

이제 git status반환 확인

On branch master
nothing to commit, working tree clean

이제 git 저장소에서 간단히 가져 와서이 웹 서버에 변경 사항을 배포 할 수 있습니다. 이것은 일부 웹 개발자가 준비 서버를 쉽게 만들 수 있기를 바랍니다.


나는 Dale의 답변을 좋아 했고 또한 추가했다.

git clone --depth 2 --no-checkout repo-to-clone existing-dir/existing-dir.tmp
git branch dev_new214
git checkout dev_new214
git add .
git commit
git checkout dev
git merge dev_new214

얕은 깊이는 많은 초기 개발 커밋을 피했습니다. 새로운 지점은 우리에게이 서버의 새로운 코드가 있다는 시각적 인 역사를 보여주었습니다. 그것은 제 의견으로는 완벽한 사용 지점입니다. 여기에 게시 한 모든 사람들의 큰 통찰력에 감사드립니다.

참고 URL : https://stackoverflow.com/questions/2411031/how-do-i-clone-into-a-non-empty-directory



반응형