여기에 (같은 질문으로) 도착한 후에는 아무것도 사용하지 않고 완전히 사용할 수있는 원격 (맨손) 저장소로 이동하는 데 필요한 모든 단계를 실제로 설명하지 않기 때문에이 답변을 추가하고 있습니다.
참고 :이 예제는 베어 리포지토리의 위치에 로컬 경로를 사용하지만 OP로 표시된 SSH와 같은 다른 git 프로토콜은 정상적으로 작동합니다.
git에 익숙하지 않은 사람들을 위해 메모를 추가하려고했습니다.
1. 베어 리포지토리 초기화 ...
> 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 branch
, 당신은 이제 볼 수 있습니다 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. 기존 파일에서 작업 폴더 만들기 파일
이 들어있는 폴더가 이미있는 경우 (복제 할 수 없음) 새 자식 저장소를 초기화하고 첫 번째 커밋을 추가 한 다음 나중에 해당 저장소에 연결할 수 있습니다.
> 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
git 푸시 의 플래그가 (새로운) 추적 된 업스트림 브랜치를 설정하도록합니다. 이전과 마찬가지로 이제 마스터 브랜치의 다른 곳에서 복제 할 수있는 완전히 작동하는 베어 리포지토리와 끌어 올릴 수있는 로컬 작업 복사본이 있습니다.
이 모든 것이 어떤 사람들에게는 명백해 보일지 모르지만 git은 최선을 다해 혼란스러워합니다 (오류 및 상태 메시지는 실제로 약간의 재 작업이 필요합니다)-희망이 있으면 다른 사람들을 도울 것입니다.
--shared
옵션을 추가 할 수도 있습니다init
. 자동으로 저장소에 그룹 쓰기 권한을 추가합니다.- link