source

로컬 Git 저장소를 원격 Git 저장소와 동기화

manysource 2023. 5. 10. 22:07

로컬 Git 저장소를 원격 Git 저장소와 동기화

로컬 저장소를 원격 저장소와 동기화하여 로컬 저장소가 원격 저장소의 100% 복사본이 되도록 합니다. 즉, 이러한 저장소에서 특정 파일이 다를 경우 로컬 저장소를 원격 저장소로 재정의하고 원격 저장소에 없는 파일이 있으면 로컬 파일이 제거됩니다.

원격 저장소를 새로 복제하는 것 외에 다른 방법이 있습니까?

로컬 변경/커밋을 무시하는 원격과 로컬 gitrepo를 한 번에 동기화하는 것과 유사한 질문입니다.

git fetch --prune

-p, --prune
가져오기 전에 원격에 더 이상 존재하지 않는 원격 추적 참조를 제거합니다.git fetch frune 옵션 docogit-scm

pull명령에도 다음이 있습니다.prune옵션(--prune또는-pgit-scm 문서 참조

git pull -p

다음 단계를 수행합니다.

git reset --hard HEAD
git clean -f -x -d -n

그때는 없이-n

이렇게 하면 모든 로컬 변경 사항이 처리됩니다.이제 그 커밋들은...

git status

다음과 같은 행을 기록합니다.

Your branch is ahead of 'xxxx' by N commits.

이제 숫자 'N'을 기록합니다.

git reset --hard HEAD~N
git pull

그리고 마지막으로:

git status

추가/커밋할 항목이 표시되지 않아야 합니다.모두 깨끗합니다.

그러나 새 복제본도 동일한 작업을 수행할 수 있지만 속도가 훨씬 느립니다.

===장비 ===

시간이 지남에 따라 저의 기트 지식이 조금씩 향상됨에 따라, 저는 동일한 것을 할 수 있는 또 다른 간단한 방법으로 생각해냈습니다.다음은 방법입니다(#설명 포함).근무 지점에 있는 동안:

git fetch # This updates 'remote' portion of local repo. 
git reset --hard origin/<your-working-branch>
# this will sync your local copy with remote content, discarding any committed
# or uncommitted changes.

로컬 커밋 및 변경사항은 이후에 보이지 않게 되지만 필요한 경우 커밋된 변경사항을 복구할 수 있습니다.

당신이 하고 싶은 것

git fetch --prune origin
git reset --hard origin/master
git clean -f -d

이렇게 하면 로컬 레포가 원격 레포와 똑같이 됩니다.

오리진 및 마스터를 동기화할 원격 및 분기로 교체해야 합니다.

Git 저장소는 단순히 디렉터리와 파일의 트리일 뿐만 아니라 분기와 병합을 포함할 수 있는 해당 트리의 기록도 저장한다는 점을 이해해야 합니다.

리포지토리에서 가져올 때 해당 분기의 전체 또는 일부를 리포지토리로 복사합니다.그런 다음 이들은 저장소에 "원격 추적 분기"로 저장됩니다. 예를 들어 다음과 같은 이름의 분기가 있습니다.remotes/origin/master그런 것들.

원격 저장소에서 새 커밋을 가져오더라도 로컬 작업 복사본은 변경되지 않습니다.

. 이 커밋은 " 작업복있커다습니밋이된웃"입니다.HEAD이 커밋은 일반적으로 로컬 지점 중 하나의 팁입니다.

로컬 지점(또는 모든 로컬 지점)을 해당 원격 지점으로 업데이트한 다음 최신 지점을 확인하십시오.

복사본과 수 ) 먼저 이 아닌 모든 합니다.git clean). 하고 그런다업트지해로당는지체다사니용합고를 git reset가져온 원격 분기로 전환할 수 있습니다.(git pull원격 분기의 모든 업데이트를 로컬 업데이트에 통합하거나 로컬 커밋이 있는 경우 병합 커밋을 만들 수 있습니다.)

그러나 작업 복사본과 로컬 커밋 모두에서 로컬 변경사항을 잃게 됩니다.원하는 항목인지 확인하십시오. 그렇지 않으면 새 분기를 사용하는 것이 좋습니다. 그러면 로컬 커밋이 저장됩니다.그리고 사용git stash아직 커밋되지 않은 변경 내용을 저장합니다.)


편집: 로컬 분기가 하나만 있고 원격 분기가 하나만 추적하는 경우에는 다음을 수행하면 됩니다.

git pull

검색할 수 있습니다.

추적된 모든 원격 분기의 현재 버전을 가져오고 현재 분기(및 작업 디렉터리)를 추적 중인 원격 분기의 현재 버전으로 업데이트합니다.

로컬 리포지토리를 재설정하고 원격 분기와 동기화

명령:오리진 및 마스터를 동기화할 원격 및 분기로 교체해야 합니다.

git fetch origin && git reset --hard origin/master && git clean -f -d

또는 단계별로:

git fetch origin
git reset --hard origin/master
git clean -f -d

이제 로컬 분기가 원격 분기의 정확한 복사본(커밋 및 모든 복사본)이 됩니다.

명령 출력:

다음은 Forge agit 저장소의 로컬 복제본에서 명령을 실행하는 예입니다.

sharkbook:forge lbaxter$ git fetch origin && git reset --hard origin/master && git clean -f -d
HEAD is now at 356cd85 FORGE-680
Removing forge-example-plugin/
Removing plugin-container-api/
Removing plugin-container/
Removing shell/.forge_settings
sharkbook:forge lbaxter$

(이 정보는 Git 사용 설명서에서 가져온 것입니다.)

저도 배우고 있기 때문에 질문에 대한 답은 아니지만 누군가에게 도움이 될 수 있습니다.

  1. 된 경우 됩니다(" " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " 으로 합니다.git branch -r)
  2. 상태로 () 이러한예복을만최상들면려태로신고동화기하사트과지본업점데이원격예▁to()면만▁and들려화동▁use기▁update이)▁(러:▁copies▁these로태)를 사용합니다.git fetch사용자 지정으로 생성된 기존 분기에는 영향을 주지 않습니다.
  3. 의 새 한 것으로 ).git add origin /path/to/repository를 사용합니다.git checkout origin/branch_name 지점의 내용이 됩니다.branch_name

분기된 레포를 동기화하는 경우 다음 단계를 수행할 수 있습니다.

Git에서 포크 저장소를 동기화하는 방법

  1. 현재 Git 분기를 확인합니다.

    git branch

  2. 마스터에 없는 경우 마스터로 체크아웃

    git checkout master

  3. 올바른 액세스 권한이 있는 경우 업스트림 리포지토리 가져오기

    git fetch upstream

  4. 아래 오류가 발생하면 실행합니다.

    git remote add upstream git@github.com:upstream_clone_repo_url/xyz.git

    fatal: 'upstream/master' does not appear to be a git repository  
    fatal: Could not read from remote repository.
    Please make sure you have the correct access rights and the repository exists.
    
  5. 이제 다음 명령을 실행합니다.

    git fetch upstream

  6. 마스터에 있는 경우 업스트림/마스터를 마스터 분기로 병합합니다.

    git merge upstream/master

    바로 그거야!

    확인차를 통해 확인git remote 구체적인 "는 " " "입니다.git remote -v

    업스트림 repo에 대한 커밋 권한도 있다면 로컬 업스트림 브랜치를 생성하여 업스트림으로 이동하는 작업을 수행할 수 있습니다.

원격 저장소의 미러를 원하는 것처럼 들립니다.

git clone --mirror url://to/remote.git local.git

이 명령은 맨 저장소를 만듭니다.맨 저장소를 원하지 않으면 상황이 더 복잡해집니다.

로컬 분기를 미러링하고 추적하기 위해 원격에 새 분기를 생성하려는 경우(또는 그 반대의 경우) 영구 수정 사항은 다음과 같습니다.

git config --global push.default current

git clone을 실행한 후에는 항상 이 명령을 사용하여 로컬 git을 구성합니다.로컬-원격 지점 "Git fatal:현재 분기에 업스트림 분기가 없습니다." 오류가 발생합니다.

이 스크립트는 원격에 없는 로컬 원격을 확인하고 로컬에서 제거합니다.

git fetch --prune; git branch -vv | egrep -v "(\[origin\/[a-zA-Z0-9/_-]+\])" | awk "{print \$1}" | xargs git branch -D

후크를 사용하면 됩니다.업데이트 후 다른 레포로 변경된 내용을 푸시하는 후크를 만들기만 하면 됩니다.

물론 병합 충돌이 발생할 수 있으므로 이를 처리하는 방법을 강구해야 합니다.

언급URL : https://stackoverflow.com/questions/6373277/synchronizing-a-local-git-repository-with-a-remote-one