programing

깃 저장소에 여러 프로젝트를 넣을 수 있는 방법이 있습니까?

elecom 2023. 7. 2. 19:03
반응형

깃 저장소에 여러 프로젝트를 넣을 수 있는 방법이 있습니까?

어떤 이유에서인지 사용할 저장소가 하나밖에 없습니다.
하지만 저는 다음을 포함한 여러 프로젝트가 있습니다.java 프젝트로,PHP scripts그리고.Android앱 프로젝트.

이제 문제는 저장소 내의 다른 하위 폴더에 저장해야 한다는 것입니다.
저는 다른 IDE를 사용합니다. IDE마다 작업 공간이 있을 수 있습니다.

문제를 해결할 수 있는 간단한 방법이 있습니까? (예를 들어, 의견이 아닌 설계를 통해)?

대부분의 사람들이 여러 저장소를 사용하라고 하지만, 다른 솔루션이 있다는 것은 언급할 가치가 있다고 생각합니다.

솔루션 1

단일 리포지토리에는 독립된 여러 분기(고아 분기라고 함)가 포함될 수 있습니다.분리된 분기는 서로 완전히 분리되어 있으며 기록을 공유하지 않습니다.

git checkout --orphan BRANCHNAME

이렇게 하면 현재 분기와 관련이 없는 새 분기가 만들어집니다.각 프로젝트는 고유한 고립된 분기에 있어야 합니다.

어떤 이유에서든, git은 고아 체크아웃 후에 약간의 청소가 필요합니다.

rm .git/index
rm -r *

삭제하기 전에 모든 항목이 커밋되었는지 확인

고아 분기가 깨끗해지면 정상적으로 사용할 수 있습니다.

솔루션 2

고아 나뭇가지의 번거로움을 모두 피하세요.두 개의 독립 리포지토리를 만들어 동일한 원격에 푸시합니다.각 repo에 대해 서로 다른 지점 이름을 사용하면 됩니다.

# repo 1
git push origin master:master-1

# repo 2
git push origin master:master-2

솔루션 3

이것은 여러 프로젝트에 단일 디렉터리를 사용하기 위한 것입니다.저는 이 기술을 한 프로젝트에서 다른 프로젝트로 변경해야 하는 밀접한 관련이 있는 프로젝트에 사용합니다.그것은 고아가 된 나뭇가지의 개념과 비슷하지만, 고아가 될 필요는 없습니다.동일한 빈 디렉토리 상태에서 모든 프로젝트를 시작하기만 하면 됩니다.

하나의 커밋된 빈 디렉토리에서 모든 프로젝트 시작

이 솔루션에서 경이로움을 기대하지 마십시오.제가 보기에, 당신은 항상 추적되지 않은 파일에 대해 짜증을 낼 것입니다.Git는 그것들로 무엇을 해야 할지 전혀 알지 못하기 때문에 컴파일러에 의해 생성되고 .gitignore 파일에 의해 무시되는 중간 파일이 있다면, 예를 들어, 당신이 당신의 소프트웨어 프로젝트와 박사 논문 프로젝트 사이에서 빠르게 스왑하려고 한다면, 그것들은 때때로 매달려 있을 것입니다.

하지만 여기 계획이 있습니다.git 프로젝트를 시작할 때 빈 저장소를 커밋하여 시작한 다음 동일한 빈 디렉터리 상태에서 모든 프로젝트를 시작합니다.이렇게 하면 두 개의 파일이 상당히 독립적이라는 것을 확신할 수 있습니다.또한, 여러분의 가지에 적절한 이름을 붙이고 게으르게 "마스터"를 사용하지 마세요.프로젝트는 별개여야 하므로 적절한 이름을 지정합니다.

Git commits(따라서 태그와 분기)는 기본적으로 디렉터리와 하위 디렉터리의 상태를 저장합니다. Git는 이들이 동일한 프로젝트의 일부인지 다른 프로젝트의 일부인지 전혀 알지 못하므로 동일한 저장소에 서로 다른 프로젝트를 저장하는 데 문제가 없습니다.문제는 다른 프로젝트를 사용하거나 나중에 프로젝트를 분리할 때 한 프로젝트에서 추적되지 않은 파일을 지우는 것입니다.

빈 리포지토리 만들기

cd some_empty_directory
git init
touch .gitignore
git add .gitignore
git commit -m empty
git tag EMPTY

프로젝트를 빈 상태에서 시작합니다.

하나의 프로젝트에서 작업합니다.

git branch software EMPTY
git checkout software
echo "array board[8,8] of piece" > chess.prog

git add chess.prog 
git commit -m "chess program"

다른 프로젝트 시작

당신이 좋을 때 언제든지.

git branch thesis EMPTY
git checkout thesis
echo "the meaning of meaning" > philosophy_doctorate.txt
git add philosophy_doctorate.txt 
git commit -m "Ph.D"

앞뒤로 전환

원할 때마다 프로젝트 사이를 왔다 갔다 합니다.이 예는 체스 소프트웨어 프로젝트로 거슬러 올라갑니다.

git checkout software
echo "while not end_of_game do make_move()" >> chess.prog
git add chess.prog 
git commit -m "improved chess program"

추적되지 않는 파일은 성가신 파일입니다.

그러나 프로젝트/브랜치 간에 스왑할 때 추적되지 않은 파일 때문에 짜증이 납니다.

touch untracked_software_file.prog
git checkout thesis 
ls
    philosophy_doctorate.txt  untracked_software_file.prog

그것은 극복할 수 없는 문제가 아닙니다.

기본적으로 Git은 추적되지 않은 파일을 어떻게 처리해야 할지 알지 못하며 이를 처리하는 것은 사용자에게 달려 있습니다.다음과 같이 추적되지 않은 파일이 한 분기에서 다른 분기로 이동하는 것을 중지할 수 있습니다.

git checkout EMPTY 
ls
    untracked_software_file.prog
rm -r *
    (directory is now really empty, apart from the repository stuff!)
git checkout thesis
ls
    philosophy_doctorate.txt

새 프로젝트를 체크아웃하기 전에 디렉터리가 비어 있는지 확인함으로써 다른 프로젝트에서 추적되지 않은 파일이 매달리지 않도록 했습니다.

세련미

$ GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01T01:01:01' git commit -m empty

빈 리포지토리를 커밋할 때마다 동일한 날짜를 지정하면 독립적으로 생성된 빈 리포지토리 커밋이 동일한 SHA1 코드를 가질 수 있습니다.이렇게 하면 두 개의 리포지토리를 독립적으로 만든 다음 나중에 하나의 리포지토리에 공통 루트가 있는 단일 트리로 병합할 수 있습니다.

# Create thesis repository. 
# Merge existing chess repository branch into it

mkdir single_repo_for_thesis_and_chess
cd single_repo_for_thesis_and_chess
git init
touch .gitignore
git add .gitignore
GIT_AUTHOR_DATE='2001-01-01:T01:01:01' GIT_COMMITTER_DATE='2001-01-01:T01:01:01' git commit -m empty
git tag EMPTY
echo "the meaning of meaning" > thesis.txt
git add thesis.txt
git commit -m "Wrote my PH.D"
git branch -m master thesis

# It's as simple as this ...
git remote add chess ../chessrepository/.git
git fetch chess chess:chess

결과

Diagram of merged repositories

프로젝트별로 하위 디렉터리를 사용하시겠습니까?

또한 파일이 있는 대신 가능한 경우 하위 디렉터리에 프로젝트를 보관하는 것이 도움이 될 수 있습니다.

chess.prog
philosophy_doctorate.txt 

갖고 있다

chess/chess.prog
thesis/philosophy_doctorate.txt 

이 경우 추적되지 않은 소프트웨어 파일은chess/untracked_software_file.prog에서 작업할 때thesis디렉터리 당신은 추적되지 않은 체스 프로그램 파일에 의해 방해받지 않아야 하며, 당신은 다른 프로젝트에서 추적되지 않은 파일을 삭제하지 않고 즐겁게 일할 수 있는 경우를 발견할 수 있습니다.

또한 추적되지 않은 파일을 다른 프로젝트에서 제거하려는 경우 원하지 않는 파일을 각각 선택하여 제거하는 것보다 원하지 않는 디렉터리를 덤프하는 것이 더 빠르고 오류가 발생하기 쉽습니다.

분기 이름에 '/' 문자를 포함할 수 있습니다.

그래서 당신은 당신의 지점들의 이름을 다음과 같은 것으로 짓고 싶을 것입니다.

project1/master
project1/featureABC
project2/master
project2/featureXYZ

저는 사용할 것입니다.

Git 저장소에 있는 Git 저장소를 여기서 확인합니다.

2019년 2월에 따라서, 저는 제안하고 싶습니다.Monorepos

언급URL : https://stackoverflow.com/questions/14679614/is-there-a-way-to-put-multiple-projects-in-a-git-repository

반응형