programing

다른 컴퓨터로 저장소 내보내기

nicescript 2023. 5. 22. 23:29
반응형

다른 컴퓨터로 저장소 내보내기

저장된 변경 사항을 다른 컴퓨터로 내보낼 방법이 필요합니다.

나는 컴퓨터 1에서 했습니다.

$ git stash save feature

스택 패치를 파일로 가져온 다음 다른 컴퓨터로 가져오려고 합니다.

$ git stash show -p > patch

이 명령은 이 레포가 복제된 다른 컴퓨터로 이동할 수 있는 파일을 제공하지만 문제는 이 파일을 어떻게 다시 스택으로 가져오느냐 하는 것입니다.

를 실행하여 패치 파일을 적용할 수 있습니다(아직 변경 사항을 커밋하지 않음).

git apply patchfile

그런 다음 현재 작업 디렉터리에서 새 스택을 생성할 수 있습니다.

git stash

한 시스템에서 패치 파일로 스택을 생성한 다음 해당 패치 파일을 다른 시스템에 공유할 수 있습니다.

스택을 패치로 생성

$ git stash show "stash@{0}" -p > changes.patch

stash@{0}의 입니다.최신 스택으로 패치 파일을 만듭니다.하려면 명령어 " 다명을사려사명니다합용령을면용하령"를합니다.$ git stash list스택 목록을 보고 패치할 스택을 선택합니다.

패치 적용

이제 해당 스택을 다른 컴퓨터로 전송하여 프로젝트의 루트 폴더에 붙여넣습니다.그런 다음 이 명령을 실행합니다.

$ git apply changes.patch

실수가 있고 변경 내용을 되돌리려는 경우

$ git apply changes.patch --reverse

또는 (컴퓨터 1의) 저장소에서 분기를 생성할 수 있습니다.

git stash branch stashed_changes_branch

변경 내용 커밋:

git commit -a

그런 다음 컴퓨터 2의 리모컨으로 추가합니다.

git remote add pc1 user@computer1:/path/to/repo

이제 다음을 사용하여 원격 정보를 검색할 수 있습니다.

git fetch pc1

이제 당신은 당신이 원하는 방식으로 커밋을 가져올 수 있습니다; 깃 체리 픽, 리 베이스 또는 당신이 원하는 대로 커밋을 가져올 수 있습니다.만약 당신이 방금 git stash를 한 것처럼 보이고 싶다면, git cherry-pick --no-commit을 사용할 수 있습니다.


computer1과 computer2 사이에 직접 연결되지 않은 경우 원격(github 등)을 사용할 수 있습니다.

git push origin stashed_changes_branch

및 컴퓨터2:

git fetch

또는 다음과 같이 전체 로컬 스택(+ 다른 로컬 분기, 로컬 태그 등)을 다른 컴퓨터에 복사할 수 있습니다.

  • git pull이전 및 새 Git 디렉터리에서 둘 다 최신 변경 사항이 있는지 확인합니다(또는 두 저장소 모두 동일한지 확인).HEAD용사를 git reset --hard commit-hash).
  • .git 폴더를 이전 git 디렉토리에서 새 리포지토리로 복사합니다.

스택은 기본 커밋과 인덱스 간의 작업 트리의 특수 병합 커밋입니다.한 가지 방법은 각 패치를 별도의 패치로 저장하고, 먼저 스택 상위 항목을 체크아웃하고, 두 패치에서 인덱스와 작업 트리를 복원한 후 마지막으로 스택을 복원하는 것입니다.

이 작업은 모든 정보를 전체적으로 다시 생성하는 데 필요하며, 이 작업이 문제가 되지 않는 경우에는 최소한 복원하기 전에 먼저 저장소의 첫 번째 상위 항목을 확인하여 충돌을 방지하고 저장소가 생성된 위치를 추적해야 합니다.

이것은 한 저장소에서 다른 저장소로 모든 저장소를 완전히 복원하기 위해 수행한 작업입니다.동일한 시스템에 저장할 수 없는 경우에는 생성한 후에 스택 태그를 번들에 저장하고 참조 목록과 번들을 대상 시스템에 복사할 수 있습니다.

원본 repo의 루트에서:

  1. stash ref 목록 가져오기
  2. fetch를 할 수 refref에 이름은 변경하십시오.git fetch는 stash refref 파일입니다. 태그 이름은 중요하지 않습니다. 충돌이 있으면 변경하십시오.저는 용한사를 요.stash_논리적 스택 참조의 숫자
  3. 논리 참조를 역순으로 sha1 해시로 변환 - 나중에 사용합니다.
  4. 나중을 위해 해당 보고서 경로 저장
refs=$(git stash list|cut -d: -f1)
for ref in $refs; do git tag stash_${ref//[^0-9]} $ref; done
refs=$(git rev-parse $refs|tac)
oldpath=$PWD

NB: 여기에는 bash 또는 호환 가능한 셸(ksh, zsh가 수행해야 합니다...)이 필요합니다. 변수를 증분할 수도 있습니다.stash_$((i++))만약 당신의 껍데기가 지지하지 않는다면.${param//pattern}

이제 새 레포에서 각 참조에 대해:

  1. 이전 보고서에서 참조 가져오기(태그 이름을 사용할 필요도 없습니다. 태그를 지정했기 때문에 gitfetch로 검색할 수 있습니다.)
  2. 참조의 제목을 저장 메시지로 사용하여 참조에서 해당 참조를 다시 가져옵니다.
for ref in $refs; do git fetch $oldpath $ref; git stash store -m "$(git show -s --pretty=%s $ref)" $ref; done

원본 트리에서 Stash를 내보내는 방법:

  1. Stash를 사용할 분기에서 새 분기 "StashTransfer" 만들기
  2. 여기에 당신의 재고를 적용하고 약속하세요.

  3. 커밋을 클릭하여 패치를 만들고 패치 파일을 가져갑니다.

  4. 다른 리포지토리로 이동하여 1에서 방금 사용한 것과 동일한 상위 분기 선택)

  5. 작업 / 패치 적용, 모드: 작업 복사본 파일 수정, 지금 패치 적용을 선택합니다. 현재 작업 환경의 패치에서 수정 사항을 커밋하지 않았습니다.

  6. 현재 레포에 대한 새 스택 만들기

또 다른 옵션은 다음과 같습니다.rsync그자리의 .git한 컴퓨터에서 다른 컴퓨터로 폴더를 이동합니다. rsync파일 변경사항만 처리합니다(복사본보다 큼).

이 접근 방식의 한 가지 단점은 구성도 덮어쓰게 된다는 것입니다. 이는 두 시스템 간에 다른 .git 구성을 실행하는 경우에는 필요하지 않을 수 있습니다.하지만 당신은 이 문제를 극복할 수 있습니다.--exclude의 옵션.rsync.

전반적으로 저는 네이티브 Git 솔루션이 더 깨끗하다고 생각하지만, 이것은rsynchack은 git보다 rsync에 더 익숙할 수 있는 급한 사람에게 좋을 수 있습니다.

git --no-pager stash show -p > patch

저장된 변경 내용을 패치 파일로 복사합니다.

git apply path/to/the/patch/file

패치 파일의 스택을 적용합니다.

다음 셸 스크립트를 사용하면 한 폴더에서 다른 폴더로 모든 스택을 복사할 수 있습니다.https://gist.github.com/senthilmurukang/29b55a0c0e8694c406991799153f3c43

원래 게시물의 시작 명령:

git stash show -p stash@{x} > patch_file

어떤 이유로 인해 사용할 수 없는 패치 파일이 생성되었습니다.대신에 나는 해야만 했습니다.

git stash apply stash@{x}
git commit

각 저장소에 대해 전송할 수 있습니다.그런 다음 파일:/// 'child' repo의 범위 내에 'parent' repo를 배치하고 각 stash commit에 대해 다음 작업을 수행했습니다.

git fetch file:///path_to_parent_git && git cherry-pick commit_sha
git reset --soft HEAD^
git stash save my_new_stash_on_child

이것은 더 복잡하지만 저에게는 효과가 있었습니다.

옵션 --binary로 표시된 로컬 파일과 내보내고 가져올 때 여러 개가 표시된 로컬 파일에도 주의하십시오.잠시 검색한 후, 저는 다음과 같이 했습니다.

#숨겨진 것을 모두 확인합니다.

git 재고 리스트

#stash by number, --옵션 이진 파일을 내보내려면 이진 파일이 중요합니다.

gitstash show stash@{0} -p --filename > patch0

#stash 가져오기, 새 리포지토리로 이동

git apply /old_stitutory/git0

#그런 다음 로컬 변경 내용을 다시 저장합니다.

#모든 stash stash@{1}, ...,stash@{n}에 대한 프로세스를 확인합니다.

한 컴퓨터에서 다른 컴퓨터로 변경사항을 이동하려면 언제든지 변경사항을 커밋한 다음 해당 컴퓨터에서 소프트 재설정을 수행할 수 있습니다.

사무실.

git commit -m "-stash-"

주방

git reset --soft HEAD~1

@Chris Maes 답변을 기반으로 합니다.

이 노드 실행repo 루트의 JS 스크립트는 모든 기존 stash에 대한 패치 파일을 생성할 수 있습니다.

const fs = require('fs');
const cp = require('child_process');

try{
    fs.mkdirSync('./stashes')   
}catch(err){console.log("Folder stashes already exists")}


var stashes = cp.execSync("git stash list").toString().split('\n');
for(var stash of stashes){
    var stashId = stash.split(":")[0];
    var patchFilename = stash.replace(/[/\\?%*:,|" <>]/g, '_');
    cp.execSync(`git stash show ${stashId} -p > ./stashes/${patchFilename}.patch`);
}

언급URL : https://stackoverflow.com/questions/3973034/export-a-stash-to-another-computer

반응형