source

"git --bare init" 저장소는 어떻게 사용합니까?

ittop 2023. 5. 7. 11:52
반응형

"git --bare init" 저장소는 어떻게 사용합니까?

중앙 Git 저장소를 만들어야 하는데 좀 헷갈리네요...

다음을 사용하여 기본 저장소(내 Git 서버의 시스템 2)를 생성했습니다.

$ mkdir test_repo
$ git --bare init

이제 로컬 저장소(머신 1)에서 기본 저장소(머신 2)로 파일을 푸시해야 합니다.SSH를 통해 시스템 2에 액세스할 수 있습니다.중요한 것은 제가 맨 저장소의 개념을 이해하지 못하는 것 같습니다.

맨 저장소에 코드를 저장하는 올바른 방법은 무엇입니까?로컬 리포지토리에서 기본 리포지토리로 변경사항을 푸시하려면 어떻게 해야 합니까?

중앙 저장소를 보유하는 올바른 방법은 저장소를 보유하는 것입니까?

저는 이 주제에 대해 조금 혼란스럽습니다.이것에 대한 단서를 주세요.

먼저 확인하기 위해서는 실행하기 전에 작성한 디렉토리로 변경해야 합니다.git init --bare맨 맨 저장소 확장자를 지정하는 입니다..git은 할수 있 다 니 습 있 니 다 할

git init --bare test_repo.git

Git 버전 < 1.8의 경우, 당신은 할 것입니다.

mkdir test_repo.git
cd test_repo.git
git --bare init

질문에 하자면, " " " " 를 사용하는 경우", " " " " (으)로을 쉽게 추가할 수.")git add <file> 그 뒤에 및그이의후.git commit.)

맨 합니다(" 의 항맨저푸업다니합트데여이하시를().git push을(를) 다른 리포지토리에서 선택합니다.

이 경우 먼저 사용자가 리포지토리에 푸시할 수 있도록 허용해야 합니다.안에있 에 있을 때 때을때.test_repo.git하다, 하다, 하다, 하다, 하다, 하다, 하다, 하다, 나다

git config receive.denyCurrentBranch ignore

커뮤니티 편집

git init --bare --shared=group

프라산트브가 언급했듯이, 이것은 당신이 개인 주택 프로젝트가 아닌 직장에서 이 일을 하고 있다면 당신이 원하는 것입니다.

이 답변을 추가하게 된 이유는 여기에 도착한 후(동일한 질문으로) 아무것도 없는 상태에서 완전히 사용 가능한 원격(베어) 레포로 전환하는 데 필요한 모든 단계를 설명하는 답변이 없기 때문입니다.

참고: 이 예에서는 베어 레포의 위치에 로컬 경로를 사용하지만, 다른 Git 프로토콜(예: OP가 지정한 SSH)은 정상적으로 작동합니다.

저는 기트에 익숙하지 않은 사람들을 위해 몇 가지 메모를 추가하려고 노력했습니다.

기본 레포 초기화...

> git init --bare /path/to/bare/repo.git
Initialised empty Git repository in /path/to/bare/repo.git/

이렇게 하면 폴더(repo.git)가 생성되고 git repo를 나타내는 git 파일로 채워집니다.현재 상태로는 이 보고서는 쓸모가 없습니다. 커밋도 없고 더 중요한 은 지점도 없습니다.이 레포를 복제할 수는 있지만 제거할 수는 없습니다.

다음으로, 우리는 작업 폴더를 만들어야 합니다.기존 파일이 있는지 여부에 따라 몇 가지 방법이 있습니다.

2a. 빈 레포를 복제하여 새 작업 폴더(기존 파일 없음)를 만듭니다.

git clone /path/to/bare/repo.git /path/to/work
Cloning into '/path/to/work'...
warning: You appear to have cloned an empty repository.
done.

이 명령은 다음과 같은 경우에만 작동합니다./path/to/work존재하지 않거나 빈 폴더입니다.주의 사항에 유의하십시오. 이 단계에서는 여전히 유용한 것이 없습니다.네가 만약cd /path/to/work그리고 실행git status다음과 같은 것을 얻을 수 있습니다.

On branch master

Initial commit

nothing to commit (create/copy files and use "git add" to track)

하지만 이것은 거짓말입니다. 지점에 .master)git branch아무 것도 반환하지 않음) 및 현재까지 커밋은 없습니다.

그런 다음 작업 폴더에 일부 파일을 복사/이동/생성한 후 git에 추가하고 첫 번째 커밋을 만듭니다.

> cd /path/to/work
> echo 123 > afile.txt
> git add .
> git config --local user.name adelphus
> git config --local user.email adelphus@example.com
> git commit -m "added afile"
[master (root-commit) 614ab02] added afile
 1 file changed, 1 insertion(+)
 create mode 100644 afile.txt

git config사용자가 누구인지 아직 git에게 말하지 않은 경우에만 명령이 필요합니다. 이제실경우를 실행하는 하십시오.git branch이제보수있다니습실▁the다있이 보일 겁니다.master상장된 지점지금 실행git status:

On branch master
Your branch is based on 'origin/master', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

nothing to commit, working directory clean

은 또한의 소지가 - 은 " 것이 단지 되지 않았을 뿐입니다. 업스트림은 "소멸"되지 않았습니다. 단지 아직 생성되지 않았을 뿐입니다.git branch --unset-upstream도움이 되지 않을 것입니다.하지만 괜찮아요, 이제 첫 번째 약속을 했으니, 우리는 밀고 나갈 수 있고 마스터는 맨 레포에서 만들어질 것입니다.

> git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 207 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To /path/to/bare/repo.git
 * [new branch]      master -> master

이 시점에서 마스터 분기의 다른 곳에서 복제할 수 있는 완전한 기능의 베어 레포와 풀 앤 푸시가 가능한 로컬 작업 복사본이 있습니다.

> git pull
Already up-to-date.
> git push origin master
Everything up-to-date

2b. 기존 파일에서 작업 폴더 만들기 파일이 있는 폴더가 이미 있는 경우(그래서 복제할 수 없음), 새 git repo를 초기화하고, 첫 번째 커밋을 추가한 다음 나중에 bare repo에 연결할 수 있습니다.

> cd /path/to/work_with_stuff
> git init 
Initialised empty Git repository in /path/to/work_with_stuff
> git add .
# add git config stuff if needed
> git commit -m "added stuff"

[master (root-commit) 614ab02] added stuff
 20 files changed, 1431 insertions(+)
 create mode 100644 stuff.txt
...

이 시점에서 첫 번째 커밋과 로컬 마스터 브랜치를 원격 추적된 업스트림 브랜치로 전환해야 합니다.

> git remote add origin /path/to/bare/repo.git
> git push -u origin master
Counting objects: 31, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (31/31), done.
Writing objects: 100% (31/31), 43.23 KiB | 0 bytes/s, done.
Total 31 (delta 11), reused 0 (delta 0)
To /path/to/bare/repo.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.

에 하십시오.-u on the branch.flag on git push의 (새) tracked upstream branch.flag on git push를 합니다.이전과 마찬가지로 이제는 마스터 브랜치의 다른 곳에서 복제할 수 있는 완전한 기능의 베어 레포와 풀 앤 푸시가 가능한 로컬 작업 복사본이 있습니다.

이 모든 것이 일부 사람들에게는 분명해 보일 수 있지만, Git은 최상의 경우 저를 혼란스럽게 할 수 있습니다(오류 및 상태 메시지는 정말로 약간의 재작업이 필요합니다). 바라건대, 이것이 다른 사람들에게 도움이 될 것입니다.

질문에 하나씩 답변합니다.

맨 저장소는 작업 트리가 없는 저장소입니다.그것은 그것의 전체 내용이 당신이 가지고 있는 것이라는 것을 의미합니다..git디렉토리입니다.

당신은 오직commit로 저장소를 드러내다push로컬 클론에서 연결합니다.작업 트리가 없으므로 수정된 파일이나 변경 사항이 없습니다.

중앙 저장소를 갖는 것이 유일한 방법입니다.bare저장소

Git에게 디렉터리를 만들어 달라고 요청할 수도 있습니다.

git init --bare test_repo.git

일반적으로 중앙 저장소를 기본 저장소로 사용합니다.

SVN 배경이 있는 경우 SVN 레포를 Git bare 레포와 연결할 수 있습니다.레포에 있는 파일들이 원본 양식에 없습니다.로컬 레포에는 "코드"를 구성하는 파일이 추가로 포함됩니다.

로컬 레포의 기본 레포에 원격을 추가하고 "코드"를 눌러야 합니다.

다음과 같은 것이 됩니다.

git remote add central <url> # url will be ssh based for you
git push --all central

이 정도면 충분합니다.

git remote add origin <url-of-bare-repo>
git push --all origin

자세한 내용은 "GIT: 기본 보고서를 업데이트하려면 어떻게 해야 합니까?"를 참조하십시오.
주의:

  • '이(가) 아닌 다른 이름을 사용할 수 있습니다.origin원격 참조용으로 제공됩니다.
  • 이렇게 하면 태그가 밀리지 않습니다. 별도의 태그가 필요합니다.git push --tags origin그것 때문에

Mark Longair 및 Roboprog의 답변을 기반으로 합니다.

if git 버전 >= 1.8

git init --bare --shared=group .git
git config receive.denyCurrentBranch ignore

또는:

if git 버전 < 1.8

mkdir .git
cd .git
git init --bare --shared=group 
git config receive.denyCurrentBranch ignore

푸시한 코드가 실제로 커밋되었는지 확인하는 것이 좋습니다.

--relative 옵션을 사용하여 경로를 명시적으로 설정하면 맨 리포지토리의 변경 로그를 가져올 수 있습니다.

$ cd test_repo
$ git log --relative=/

이렇게 하면 커밋된 변경 내용이 일반 Git repo인 것처럼 표시됩니다.

--bare 플래그는 작업 디렉토리가 없는 리포지토리를 만듭니다.기본 리포지토리는 중앙 리포지토리이며 병합 오류를 방지하기 위해 여기서 코드를 편집(저장)할 수 없습니다.

예를 들어 로컬 저장소(머신 1)에 파일을 추가하고 맨 저장소에 푸시하면 항상 '빈' 상태이므로 맨 저장소에 파일이 표시되지 않습니다.그러나 실제로 저장소에 무언가를 푸시하면 서버(기계 2)에 있는 다른 저장소를 복제하여 해당 저장소를 명시적으로 볼 수 있습니다.

시스템 1의 로컬 리포지토리와 시스템 2의 '복사' 리포지토리가 모두 비어 있습니다.기본 저장소와 비저장 저장소 간의 관계

그 블로그는 당신이 그것을 이해하는 것을 도울 것입니다.https://www.atlassian.com/git/tutorials/setting-up-a-repository

다음 명령을 실행하여 로컬 리포지토리를 초기화할 수 있습니다.

mkdir newProject
cd newProject
touch .gitignore
git init
git add .
git commit -m "Initial Commit"
git remote add origin user@host:~/path_on_server/newProject.git
git push origin master

로컬 리포지토리에서 프로젝트를 수행하고 서버를 중앙 리포지토리로 사용해야 합니다.

또한 Git 저장소를 만들고 유지 관리하는 모든 측면을 설명하는 이 문서를 따를 수 있습니다.초보자를 위한 깃

언급URL : https://stackoverflow.com/questions/7632454/how-do-you-use-git-bare-init-repository

반응형