당신은 어떻게 구성하는 여러 자식 저장소,그래서 그들 모두가 함께 백업?

StackOverflow https://stackoverflow.com/questions/36862

  •  09-06-2019
  •  | 
  •  

문제

와 SVN,나는 하나의 큰 저장소 내에서 서버 및 체크아웃에서 몇 가지 기계입니다.이것은 매우 좋은 백업 시스템,그리고 나를 쉽게 작업에 임의의 기회를 제공합니다.내 체크 아웃할 수 있는 특정 프로젝트에 투입 업데이트'마스터'프로젝트,또는 나 수 있 체크아웃 전체 것입니다.

지금,나는 무리의 git repositories,에 대한 다양한 프로젝트의 몇 가지 있습니다.또한 SVN 저장소 언급한 수입을 통해 git-svn command..

기본적으로,저는 좋아하는 데는 모든 내 코드(지 프로젝트,하지만 무작위 조각과 스크립트,약관에 동의하는 것으로 이력서,기사 작성,웹사이트를 만들었고 그래서)를 하나의 큰 저장소 쉽게 할 수 있습니 clone 에 원격 컴퓨터 또는 메모리 스틱/하드 드라이브가 필요합니다.

문제 때문에,그것은 개인 저장소,진행하고 있습니다.을 허용하지 않을 확인하는 특정 폴더의(수 있는 푸시 github 에 별도의 프로젝트로,하지만 변경이 나타날에 모두 마스터 저장소이며,sub-repos)

사용 git 서브모듈 시스템지만,그것은 행동하지 않는 방법을 내가 원하는 그것을 너무(하위 모듈은 포인터를 다른 저장소 및 정말 하지 않을 포함하는 실제 코드는,그래서 그것은 쓸모 없는 백업)

현재 폴더가 있의 git-repos(예를 들어~/code_projects/proj1/.git/~/code_projects/proj2/.git/),고하고 후 변 proj1 나 git push github,그때 파일을 복사로~/Documents/드/python/projects/proj1/고 하나의 커밋(대신은 수많은 사람에 개별 repos).다음 git push backupdrive1, git push mymemorystick etc.

그래서 질문:어떻게 귀하의 개인 코드와 프로젝트 git repositories 유지하고,동기화 및 백업됩?

도움이 되었습니까?

해결책

강력 에 대한 조언을 넣고 관련 데이터에 지정된 Git 장합니다.오버헤드를 만드는 새로운 저장소주 낮은,그리고 기능 하는 것을 가능하게 유지 다른 계통 완전히 분리되어 있습니다.

싸우는 아이디어를 의미합으로 끝나는 불필요하게 얽힌 역사 렌더링 관리 더 어려운 것--more 중요한 것은"고고학은"공구를 적용하므로 결과의 희석.또한,당신이 언급한,Git 서는"단위 복제는"저장소 및 실질적으로는 그렇게 할 때문에 그것의 자연을 분산.

하나의 솔루션을 유지 하는 모든 프로젝트/package/등이 있습니다.으로 자신 저장소(즉,작동하지 않고 나무)에서 축복 받은 계층구조, 다음과 같:

/repos/a.git
/repos/b.git
/repos/c.git

면 몇 가지 규칙을 설립 된,그것은 사소한 적용 관리 작업(백업,패킹,웹 게시용) 완벽한 계층을 제공하는 역할을 전적으로 비슷하지 "모놀리식"SVN 저장소가 여기에 해당합니다.이러한 작업 저장소도 가 비슷 SVN 워크플로우 추가하여,하나는 사용하는 로컬 커밋 및 분기:

svn checkout   --> git clone
svn update     --> git pull
svn commit     --> git push

당신이 여러 개 있을 수 있습 리모트에서는 각 작동이 복제,편의를 위해 동기화 사이의 여러 당사자:

$ cd ~/dev
$ git clone /repos/foo.git       # or the one from github, ...
$ cd foo
$ git remote add github ...
$ git remote add memorystick ...

할 수 있습 fetch/잡아당기기에서 각각의"원",작업 투입 로컬음(""백업)을 이러한 각각의 리모컨은 경우 가 준비와 같은 것(참고 어떻게 하는 것이 커밋 과 역사의 각각의 리모컨!):

$ for remote in origin github memorystick; do git push $remote; done

을 설정 하는 가장 쉬운 방법은 기존 작업 저장소 ~/dev/foo 으로 이러 베어 저장소가 아마:

$ cd ~/dev
$ git clone --bare foo /repos/foo.git
$ mv foo foo.old
$ git clone /repos/foo.git

주로 해당하는 svn import-그러나지 않을 던져 기존,"local"역사를습니다.

참고: 서브 모듈 는 메커니즘을 포함하는 공유 관련 계보,그래서 내가 참으로 고려하지 않을 것이 그들이 적절한 도구 한 문제를 해결하기 위해 노력하고있다.

다른 팁

에 추가할 데미안의 응답 그는 것이 좋습니다.:

$ for remote in origin github memorystick; do git push $remote; done

당신은 설정할 수 있는 특별한 원격을 밀어하는 모든 개인적인 실 리모컨 1 명;나는 그것을 발견에 http://marc.info/?l=git&m=116231242118202&w=2:

그래서"git push"(그것이 감시를 밀어 동일 지점 여러 번),할 수 있습니다 무엇을 할:

  • .git/config 포함합니다:

    [remote "all"]
    url = master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
    url = login.osdl.org:linux-2.6.git
    
  • 지금 git push all master 밀어 것입니다"master"지점을 모두
    의 그 원격 저장소가 여기에 해당합니다.

저장할 수도 있습니다 자신을 입력하여 Url 을 두번 사용하여 contruction:

[url "<actual url base>"]
    insteadOf = <other url base>

또한 궁금에 대한 제안을 처리하는 방법이고 설명합니다 현재 설정을 사용하는(와 SVN).기본적으로 내가 만든 포함하는 저장소 미니 파일 시스템을 계층을 포함하여 자신의 bin 및 lib dirs.가 스크립트의 루트에서 이 나무는 환경 설정을 추가 이러한 bin,lib 등...다른 dirs 적절한 환경 변수입니다.그래서 루트 디렉토리는 기본적으로 다음과 같:

./bin/            # prepended to $PATH
./lib/            # prepended to $LD_LIBRARY_PATH
./lib/python/     # prepended to $PYTHONPATH
./setup_env.bash  # sets up the environment

지금부/bin/lib 있는 여러 프로젝트 및 해당 라이브러리입니다.이지 않는 표준 프로젝트이지만,그것은 매우 쉽게 다른 사람을 위해 내는 그룹을 체크 아웃 repo,실행'setup_env.bash'스크립트와 가장 최신 버전의 프로젝트의 모든 로컬에서 자신의습니다.들에 대해 걱정할 필요가 없 설치/업데이트/usr/bin 또는/usr/lib 고 그것을 유지하는 간단하 체크아웃하고 아주 지역화된 환경당습니다.누군가가 수도 있습니다 rm 전체 저장소에 대해 걱정하지 않을 제거하면 어떤 프로그램입니다.

이것은 잘 작동하는 우리를 위해,그리고 나는 확실하지 않으면 우리는 그것을 변경합니다.이 문제는 많은 프로젝트에서 이 하나의 큰 저장소.이 있 git/Hg/bzr 표준 방법의 환경을 만드는 다음과 같이 파괴 프로젝트를 자신의 저장소?

에,나는 시도하지 않은 중첩 git repositories 아직하지 않았기 때문에 실행 상황으로 내가 필요합니다.으로 읽었에 #git 채널 git 얻을 것으로 보인에 의하여 혼동이 중첩 저장소,즉당신은 노력하고 git init 내부 git 장합니다.을 관리하는 유일한 방법은 중첩 git 구조를 사용하거나 git-submodule 또는 안드로이드의 repo 유틸리티입니다.

으로는 백업 책임 당신을 설명하는 말 그것은...나를 위해 일반적으로"origin"저장소에 대한 각 프로젝트에서 네트워크 드라이브에서는 정기적으로 백업해서는 IT 기술에 의해 백업 전략의 선택입니다.그것은 간단하고 나는 걱정할 필요가 없다.;)

에 대해 무엇을 사용하여 미스터 을 관리하기 위한 여러 자식 repos at once:

미스터(1)명령할 수 있는 점검 업데이트하거나,다른 작업을 수행 설정의 저장소인 것처럼 하나의 결합 된 저장소.그 의 모든 조합을 지원합니다 subversion,git,cvs,mercurial,bzr, darcs,cvs,vcsh,화석과 정확성을 저장소에 대한 지원 다른 수정 제어 시스템에 쉽게 추가할 수 있습니다.[...]

그것은 매우를 통해 구성할 수 있는 간단한 쉘 스크립트입니다.몇 가지 예입 의 일을 할 수 있는 포함한다:

[...]

  • 업데이트할 때 git 을 당겨서 두 개의 서로 다른 업스트림 및 두 개의 병합 함께.
  • 실행 저장소에서 업데이트 평행선,크게 신속 업데이트 과정이 진행됩니다.
  • 을 기억하는 작업으로 인해 실패를 노트북에 오프라인,그래서 그들은 다시 시도할 수 있습니다면 그것은 다시 온라인.

또 다른 방법이 있다는 데에 대한 중첩된 git repos 지만,그 문제가 해결되지 않입니다.여전히 사람들을 위한 솔루션을 찾고 있었:

에서 최고 수준을 자식 repo 그냥 숨기기 폴더니다.gitignore 포함하는 중첩된 git repo.이것은 쉽게 두 가지 별도의(그러나 중첩!) git repos.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top