programing

다른 Gitrepo 내부에서 Gitrepo 유지 관리

closeapi 2023. 6. 25. 20:06
반응형

다른 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 파일에 AB), , , , 를 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 내부에 머물러야 합니다.

몇 가지 간단한 참고 사항:

  1. 둘다요.repos독립적으로 작동하므로 병합할 수 없습니다.
  2. 상위 보고서에 추가하지 않는 한 하위 폴더 및 파일 내부의 모든 변경 내용이 포함됩니다..gitignore
  3. 하위 폴더에 추가하지 않으면 하위 폴더 및 파일 내부의 모든 변경 내용이 포함됩니다..gitignore.
  4. 자녀의 .gitignore파일은 서로 독립적으로 작동합니다., 레포에 파일을 ..gitignore
  5. 다인 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

반응형