다른 Gitrepo 내부에서 Gitrepo 유지 관리
제가 원하는 것은 다음과 같습니다.
REPO-A
/.git
/otherFiles
/REPO-B
/.git
/moreFiles
저는 REPO-A의 모든 콘텐츠를 REMOTE-A에 푸시하고 REPO-B만 REMOTE-B에 푸시할 수 있기를 원합니다.
가능합니까?
Git 서브모듈을 사용하고 싶은 것처럼 들립니다.
Git는 하위 모듈을 사용하여 이 문제를 해결합니다.하위 모듈을 사용하면 Git 저장소를 다른 Git 저장소의 하위 디렉터리로 유지할 수 있습니다.이렇게 하면 프로젝트에 다른 리포지토리를 복제하고 커밋을 별도로 유지할 수 있습니다.
저는 항상 심볼릭 링크를 사용하여 두 개의 별개의 저장소를 유지해 왔습니다.
예, 그린 파일 계층 구조로 요청한 작업을 정확히 수행할 수 있습니다.Repo-B는 독립적이며 Repo-A에 대한 지식이 없습니다.Repo-A는 자체 파일과 Repo-B 파일의 모든 변경 사항을 추적합니다.
하지만 저는 이렇게 하는 것을 추천하지 않습니다.파일을 변경하고 Repo-B에서 커밋할 때마다 Repo-A에서 커밋해야 합니다.Repo-B의 분기는 Repo-A와 혼동되고 Repo-A의 분기는 불안정합니다(폴더 제거 등의 문제).서브모듈이 확실히 좋은 방법입니다.
를 사용할 수 있습니다..gitignore
파일에 A
B
), , , , 를 B
. . 상위 항목 커밋.gitignore
두 를 추가하기 에.B
저장소
"git-subrepo"를 사용하면 원하는 것(REPO-A repo에는 참조 파일만 포함되지 않고 REPO-B 폴더에 있는 파일을 포함한 모든 파일이 포함됨)을 달성할 수 있습니다.
https://github.com/ingydotnet/git-subrepo
일부 기여자가 subrepo 명령을 설치하지 않은 경우에도 작동합니다. 일부 기여자는 전체 폴더 구조를 볼 수 있지만 subrepo에 대한 변경사항을 커밋할 수 없습니다.
다양한 선택지가 있으며, 가장 좋은 선택지는 여러분의 목적에 달려 있습니다.
부모를 서로 다른 앱의 컨테이너로 유지하고 일부 앱이 결국 저장소가 될 수 있다면 베어 Git를 사용하여 다른 저장소로 처리하면 됩니다(서브 모듈 없음, 서브레포스 없음).Git 기능을 더 배울 필요가 없습니다.
부모를 서로 다른 리포지토리의 "프로젝트"로 유지하고 서로 다른 공동작업자에 대한 액세스를 안전하게 관리하려면 서로 다른 리포지토리 폴더에 심볼 링크를 사용하는 솔루션이 좋습니다.다시 말하지만, 깃 기능을 더 배울 필요가 없습니다.
설명:
중 만약앱중레된다면포가그냥,하나가▁if.git init
거기에 원격 레포와 git 튜토리얼을 추가하고 앱을 위해 그 시간을 보냅니다.그것은 작동할 뿐이며, 상위 레포에서 커밋은 여전히 나머지 앱에 원자적일 수 있으며, 때때로 추가 커밋이 있을 수 있지만, 당신은 레포B의 각 커밋에 대해 상위 A를 커밋할 필요가 없습니다.두 저장소 모두에 서로 다른 권한을 적용할 수 있습니다. 단, repoB를 무시하기 위해 .gitignore를 사용하지 않는 한 부모가 repoB 코드를 가질 수 있습니다.
저의 경우, 저는 리포 A를 리포 B와 병합하고 싶지 않았기 때문에 리포 내부의 리포가 완벽하게 작동합니다.주의 깊게 업데이트하십시오..gitignore
둘 다를 위하여repos
그리고 git 명령을 사용하는 동안 각 dir 내부에 머물러야 합니다.
몇 가지 간단한 참고 사항:
- 둘다요.
repos
독립적으로 작동하므로 병합할 수 없습니다. - 상위 보고서에 추가하지 않는 한 하위 폴더 및 파일 내부의 모든 변경 내용이 포함됩니다.
.gitignore
- 하위 폴더에 추가하지 않으면 하위 폴더 및 파일 내부의 모든 변경 내용이 포함됩니다.
.gitignore
. - 자녀의
.gitignore
파일은 서로 독립적으로 작동합니다., 레포에 파일을 ..gitignore
- 다인
repos
병합해야 합니다. 위 가이드는 유효하지 않은 것으로 간주됩니다.따라서 repo 전략 내부의 repo를 사용하기 위해서는 전체적인 사례를 제대로 연구해야 합니다.
이것을 처리할 수 있는 방법이 하나 더 있습니다.하위 모듈인 리포지토리를 각각의 독립 리포지토리로 배치할 수 있습니다.또한 마스터 repo 내부에 하위 모듈 repo에 대한 소프트 링크를 만들 수 있습니다.
$ ls
$ main-repo submodule1 submodule2
$ ln -s submodule1 main-repo/submodule1
$ ln -s submodule2 main-repo/submodule2
main-repo 내부의 파일이 나열되면 SoftLinks 하위 모듈이 나열됩니다.
$ ls main-repo/
$ other-files submodule1 submodule2
내가 찾은 가장 간단한 것은 REPO-A의 .git/info/exclude를 편집하는 것입니다.
$vim .git/info/exclude
이렇게 보여야 합니다.방금 아래 마지막 줄을 추가했습니다.
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
REPO-B/
질문이 처음 게시된 지 몇 년 후에 이곳에 온 사람들을 위해:
git subtree
당신이 찾고 있는 것은 다음과 같습니다.
$ git clone https://..../REPO-A
$ cd REPO-A
# Create a remote alias for the REPO-B, for convenience
$ git origin add REPO-B https://..../REPO-B
# clone REPO-B
$ git subtree pull --prefix=REPO-B REPO-B main --squash
# Develop as you wish, do commits to both REPO-A and REPO-A/REPO-B
# All changes will be pushed to REPO-A but not to REPO-B
# When/if you want to merge things back to REPO-B
$ git subtree push --prefix=REPO-B REPO-B main
# When you want to pull new changes for REPO-B just repeat the pull
$ git subtree pull --prefix=REPO-B REPO-B main --squash
사람이 하면 REPO-B의 수 (REPO-A와 달리).git submodule
하지만 그들은 원격 스펙을 가지고 있지 않을 것입니다.그들에게 REPO-A는 단일 저장소와 같습니다.
자세한 내용은 다음을 참조하십시오.git subtree
장소: https://www.atlassian.com/git/tutorials/git-subtree
언급URL : https://stackoverflow.com/questions/4659549/maintain-git-repo-inside-another-git-repo
'programing' 카테고리의 다른 글
데이터베이스 데이터mongodb 단위의 크기 (0) | 2023.06.25 |
---|---|
Vuex에서 계산된 속성을 사용하여 돌연변이가 등록되지 않음 (0) | 2023.06.25 |
파이어베이스Init 제공자:Firebase App 초기화 실패 (0) | 2023.06.25 |
Java java.sql.SQL 예외:문을 준비할 때 열 인덱스가 잘못되었습니다. (0) | 2023.06.25 |
도커 컨테이너에서 호스트 mongodb에 연결 (0) | 2023.06.25 |