"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
'source' 카테고리의 다른 글
Azure 앱 서비스 플랜을 일시 중지하려면 어떻게 해야 합니까? (0) | 2023.05.07 |
---|---|
MongoDB: 쿼리를 표준화할 수 없음: BadValue Projection에는 포함과 제외가 혼합되어 있을 수 없습니다. (0) | 2023.05.07 |
T-SQL에서 데이터베이스 이름에 변수를 사용하는 방법은 무엇입니까? (0) | 2023.05.07 |
Angular-cli 빌드로 사용자 지정 파일을 포함하는 방법은 무엇입니까? (0) | 2023.05.07 |
목표-C에서 self = [super init]가 0이 아닌지 확인해야 하는 이유는 무엇입니까? (0) | 2023.05.07 |