[*]에 익숙한 대부분의 버전 제어 도구 및 CVS, SVN, git, Mercurial, Bazaar - 디렉토리 트리에 일종의 "마커"가 있습니다.ISO VC 도구로 관리되는 것으로 표시된 디렉터리 트리 아래에 있지 않은 파일을 관리 할 수있는 버전 제어 도구
예. 버전 제어 파일 /a/b/c/file.txt
을 원할 경우 트리의 일부 레벨에 저장소를 설정합니다 (예 :
/a/b/.bzr
/a/b/.git
/a/b/.hg
/a/b/CVS
DVCSes의 대부분은 실제로 "마커"의 버전 기록을 저장합니다. CVS는 그렇지 않습니다 - CVS 디렉토리에는 실제 저장소 (기본적으로 심볼릭 링크 또는 하드 링크는 아니지만 링크)로가는 방법을 알려주는 파일이 있습니다. 또한 CVS는 작업 트리의 모든 하위 디렉토리에 링크 "CVS"디렉토리를두고 그 디렉토리를 일부 저장소의 해당 위치에 연결합니다. (반드시 같을 필요는 없습니다.)
Q : 파일 시스템에 이러한 링크 나 마커가 필요없는 최신 DVCS 도구가 있습니까?
예. 버전 제어에서 파일을
/a/b/c/file.txt
하지만 {A/B/C/file.txt를}이 부분은 반드시 디렉토리 경로가 아닌 곳 저장소는
/x/y/z/repo/.DVCS-TOOL/{a/b/c/file.txt}
에 있지만 가능 항목 데이터베이스에서.
당신이 저장소 내부에서 다음과 같은 일을 할 수 있도록 :
> cd /x/y/z/repo
> DVCS-TOOL add /a/b/c/file.text
Warning: /a/b/c/file.txt is not under the repository /x/y/z.
Are you sure that you want to add such an outside-repository file? [y/n] y
Absolute or relative path? [ar] a
> DVCS-TOOL ci
/a/b/c/file.text --ci--> /x/y/z/repo/.DVCS-TOOL/{a/b/c/file.txt}
> rm /a/b/c/file.txt
> DVCS-TOOL status
Missing /a/b/c/file.text --in-repo-as--> /x/y/z/repo/.DVCS-TOOL/{a/b/c/file.txt}
> DVCS-TOOL revert
/a/b/c/file.text <--reverted-from-- /x/y/z/repo/.DVCS-TOOL/{a/b/c/file.txt}
> echo 'stuff' >> /a/b/c/file.txt
> DVCS-TOOL ci
/a/b/c/file.text --ci--> /x/y/z/repo/.DVCS-TOOL/{a/b/c/file.txt}
과의 repo 외부에서
, 당신은 할 수 있습니다> cd /a/b/c
> echo 'more stuff' >> file.txt
> DVCS-TOOL -repo /x/y/z/repo ci
/a/b/c/file.text --ci--> /x/y/z/repo/.DVCS-TOOL/{a/b/c/file.txt}
동기 부여 :
I 버전을 내 홈 디렉토리를 제어하고 Linux, Cygwin 또는 Windows와 같은 다른 시스템을 변경합니다.
물론, cygwin /
을 관리 할 수 있습니다. 따라서 /etc/bash.bashrc
및 /usr/local/etc/foo.rc
과 같은 파일에 대한 변경 사항을 원래대로 체크인 할 수 있습니다. 예 : /.bzr
을 만들 수 있습니다. (종종 전체 트리가 아닌 배포판을 검색 할 수있는 특정 파일 만 검사합니다.)
나는 소유하고있는 UNIX/Linux 시스템에서이 작업을 수행 할 수 있습니다.
하지만 /
에 대한 쓰기 권한을 가지고 있지만 /usr/etc/foo/bar
및 /etc/baz/bif
을 어떻게 ... 그리고 두 개의 별도의 repos을하고 싶지 않지만, 대신 "스파 스 REPO"을하지 않으려면.
아니면 언제든지 멀리 /cygwin
를 날려 버릴 수 있도록하려면,하지만 여전히 (다른 시스템에서 /etc/bash.bashrc
을 가능하게하고, 지옥) /cygwin/etc/bash.bashrc
에 /a/b/my-repo/{cygwin/etc/bash.bashrc}
에서 편리 매핑이
을 또는 경우, 윈도우 오늘 우연히 예 : 나는
C:\Users\[USERNAME]\AppData\Roaming\Adobe\FrameMaker\11\Maker.ini
또는 Cygwin에서 경로와 같은 버전 관리 파일을 원하는
/cygdrive/c/Users/glew/AppData/Roaming/Adobe/FrameMaker/7.2/maker.ini
그러나 나는 C에서의 repo 만들지 않으 : .hg 또는 C : 사용자 \ \ glew.hg 나 ... 난 그냥 하나 개의 repo를 갖고 싶어
을 and./or 작업 공간 기반 해당 repo에 연결되거나, repo/workspace 아래에 있지 않은 대상 파일을 처리하는 방법을 알고있는 명령.
Q : 이것을 수행하는 최신 DVCS 도구에 대해 알고 계십니까?
Q : 그렇다면 어떻게됩니까?
예. 내가 막연하게 bzr이 작업 공간에서 repos를 공유 할 수 있다는 것을 알았지 만, AFAIK는 여전히 작업 공간을 repo에 연결하는 /a/b/workspace/.bzr 파일이어야합니다. 그래서 "바자를 보아라"보다 더 자세한 내용이 필요합니다.
예. hg에는 --repository 옵션이 있다는 것을 알고 있습니다. 하지만 내가하고 싶은 일을하지 않습니다
> cd /tmp
> mkdir tmp1; cd tmp1
./tmp1
> hg init
> cd ..
> mkdir tmp2; cd tmp2
./tmp2
> bar.txt
> hg --repository ../tmp1 add bar.txt
abort: bar.txt not under root '/tmp/tmp1'
이
참고 * : 내가 말하는 이유는 "나는 익숙 버전 관리 도구의 대부분, 그리고 현대적인 도구의 모든 ..."입니다 "박스, 링크 및 병렬 트리 : 구성 관리 시스템의 요소"에 설명 된 도구 워크샵 Proceedings of the Software Management Conference에서. 1989.
은 그러한 특징이있다. 또는, 오히려, 그러한 기능을했다.
나는 당황스럽게도 저자입니다. 그러나 아니, 정말로, 나는 자아 만족을 위해이 질문을하지 않았다. 나는이 질문을 쓰기 시작할 때이 종이를 잊어 버렸다.
또한이 백서에 설명 된 도구는 오래되고 오래 전에 사라졌으며 몇 년 전이나 몇 년 전에 고용주에게 남겨졌습니다. 그리고 확실히 현대 DVCS가 아닙니다.
예, 알고 있습니다. Brian Berliner가 자신의 CVS 논문에서 제 논문을 모욕합니다. 그는 틀렸고 나도 옳았지 만 또 다른 문제입니다. (Brian은 라이브 록의 가능성에 만족하고 있습니다.)
어쨌든, 저는 저장소와 저장소 외부의 파일 간의 매핑이라는 아주 오래된 개념이 현대 DVCS 도구에서 다시 등장하기를 바라고 있습니다. 위에서 설명한대로 사용하고 싶습니다.
아마도 PERFORCE는 스페이드에서 이것을 수행할만한 가치가있을 것입니다. –