문제

가 있는 것이 가능한 2git repositories 에서 하나 디렉토리?나는 생각하지 않지만,줄 알았는데 요청합니다.기본적으로,고 싶을 확인하는 내 집에서 directory config 파일(예를 들어,.emacs)해야 하는 일반적인 모든 기계가 작동하지만,두 번째 저장소에 대한 현지 파일(예를 들어,.emacs.지역)을 포함하는 기기-특정 구성이 있습니다.유일한 방법은 나의 생각할 수 있을 하는 것은 로컬 config 하위디렉토리에 무시하고는 하위 디렉터리에서 주요 git 장합니다.다른 어떤 아이디어가?

도움이 되었습니까?

해결책

으면 내가 무슨 일을 하는지 이해를 처리할 수 있습니다 그것은 모두 하나에 저장소를 사용하여 별도의 지점에 대한 각각 기계,그리고 지점을 포함하는 일반적인 가정 directory config 파일이 있습니다.

초기화하고 저장소 및 커미 일반적인 파일을 아마도 이름을 바꾸 MASTER 으로 일반적입니다.후 별도의 지점에서 있는 각 컴퓨터로 작업,그리고 commit 기계-특정 파일로는 지점에 있습니다.모든 시간을 변경하는 일반적인 파일을 병합하는 공통점으로 각각의 기계의 지점을 다른 컴퓨터(에 대한 스크립트를 작성하는 많은 경우).

그런 다음에 각각 기계,체크아웃되는 기계의 지사는 포함한 일반적인 config 파일이 있습니다.

다른 팁

이 기사는 이것을 상대적으로 잘 다룹니다.

https://github.com/rrrene/gitscm-next/blob/master/app/views/blog/progit/2010-04-11-environment.markdown

기본적으로 명령 줄에서 일하는 경우 추측보다 간단합니다. 2 개의 git repos를 원한다고 가정 해 봅시다 :

.gitone
.gittwo

당신은 그렇게 설정할 수 있습니다.

git init .
mv .git .gitone
git init .
mv .git .gittwo

파일을 추가하고 같은 파일에만 커밋 할 수 있습니다.

git --git-dir=.gitone add test.txt
git --git-dir=.gitone commit -m "Test"

따라서 git 옵션이 먼저 나온 다음 명령, Git 명령의 옵션이 제공됩니다. 다음과 같은 git 명령을 쉽게 별명 할 수 있습니다.

#!/bin/sh
alias gitone='git --git-dir=.gitone'
alias gittwo='git --git-dir=.gittwo'

그래서 당신은 약간 덜 타이핑을 통해 하나 또는 다른 사람에게 헌신 할 수 있습니다. gitone commit -m "blah".

까다로운 것처럼 보이는 것은 무시됩니다. .gitignore는 일반적으로 프로젝트 루트에 위치하므로 전체 루트를 전환하지 않고도이를 전환하는 방법을 찾아야합니다. 또는, .git/info/exclude를 사용할 수 있지만, 모든 무지는 다른 사용자를 망칠 수 있습니다. 두 리포를 사용하는 다른 사람들은 .gitignore를 푸시하여 충돌을 일으킬 수 있습니다. 이러한 문제를 해결하는 가장 좋은 방법은 분명하지 않습니다.

Tortoisegit과 같은 GUI 도구를 선호하는 경우 몇 가지 어려움도 있습니다. 이 도구의 가정이 충족되도록 .gitone 또는 .gittwo를 일시적으로 이름 바꾸는 작은 스크립트를 작성할 수 있습니다.

살펴보십시오 git 하위 모듈.

서브 모듈은 소스 트리의 전용 하위 디렉토리에 외국 저장소를 내장 할 수 있으며, 항상 특정 커밋을 가리 킵니다.

Richih는 불리는 도구를 썼습니다 vcsh Git의 가짜 베어 리포지토리를 사용하여 Dotfiles를 관리하는 도구는 하나 이상의 작업 디렉토리를 $ 홈에 넣습니다. CSH Afaik과 관련이 없습니다.

그러나 여러 디렉토리가 있다면 Git-Submodules (최상의 상황에서 고통 스럽고이 예제 사용이 최상의 상황이 아닙니다)에 대한 대안입니다. Gitslave 이는 슬레이브 리포지토리가 항상 지점 끝에 체크 아웃하고 자회사 리포지토리를 변경하기 위해 3 단계 프로세스를 필요로하지 않습니다 (올바른 지점에 체크 아웃하고 변경을 수행하고 커밋 한 다음으로 이동합니다. 새로운 하위 모듈 커밋을 슈퍼 프로젝트하고 커밋).

변수를 사용하여 가능합니다 GIT_DIR 그러나 당신이 무엇을하고 있는지 모르는 경우 많은 경고가 있습니다.

예, 서브 모듈은 아마도 당신이 원하는 것일 것입니다. 또 다른 옵션은 작업 사본을 하위 디렉토리에 두는 다음 홈 디렉토리에서 관심있는 파일로 Symlinks를 가리키는 것입니다.

내가 선호하는 방법은 Subdir에서 Repo를 사용하고 재귀적인 기호 링크를 사용하는 것입니다.

git clone repo1
cd somerepo
git clone repo2
cd repo2
./build

어디서 '레포/빌드'-파일은 다음과 같습니다.

#!/bin/bash 
SELF_PATH="$(dirname "$(readlink -f "$0")" )"  # get current dir 
cd .. && git stash && git clean -f -d ''       # remove previous symlinks
cp -sR "$SELF_PATH"/* ../.                     # create recursive symlinks in root

주의: 'git add'를 사용하지 마십시오.

다른 옵션은 별도의 폴더를 사용하고 한 폴더에서 다른 폴더에서 상징적 하드 링크를 만드는 것입니다.

예를 들어, 저장소가있는 경우 :

  1. repo1/foldera
  2. repo1/folderb

그리고:

  1. repo2/folderc

폴더를 동성 링크 할 수 있습니다 FolderA 그리고 FolderB repo1에서 repo2로. Windows의 경우 Repo1에서 실행되도록 명령이 다음과 같습니다.

User@Repo1$ mklink /J FullPath/Repo2/FolderA FullPath/Repo1/FolderA
User@Repo1$ mklink /J FullPath/Repo2/FolderB FullPath/Repo1/FolderB
User@Repo1$ printf "/FolderA/*\n/FolderB/*\n" >> .gitignore

기본 리포지토리의 파일의 경우 각각의 파일을 동성화해야하며 리포지토리에 추가해야합니다. .gitignore 원하지 않는 한 소음을 피하기 위해.

면책 조항 : 이것은 광고가 아닙니다. 저는 제공된 도서관의 개발자입니다.

여러 리포지토리를 하나의 폴더에 혼합하려는 케이스를 처리하기 위해 GIT 확장을 만들었습니다. LIB의 장점은 리포지토리와 파일 충돌을 추적하는 것입니다. 당신은 그것을 찾을 수 있습니다 github. 시도해 볼 수있는 저장소가 2 개 있습니다.

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