ubuntu 18.04 LTS Git 서버 만들고 사용하기.
git 서버: ubuntu 18.04에 설치
윈도우PC: windows 버전 설치는 생략하였음.
1. git-core 설치
snowfox@fox:~$ sudo apt-get install git-core
2. git user 생성
ssnowfox@fox:~$ sudo useradd -d /home/git -m -c "MyGit" -s /bin/bash git snowfox@fox:~$ sudo passwd git Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully snowfox@fox:~$
3. git global 설정
git@fox:~$ git config --global user.name git@fox:~$ git config --global user.name "snowfox" git@fox:~$ git config --global user.email "snowffox@example.com" git@fox:~$ git config -l user.name=snowfox user.email=snowffox@example.com
4. git repository 생성
snowfox@fox:~$ su - git Password: git@fox:~$ git@fox:~$ mkdir Repo
5. 프로젝트 생성
3에서 만든 저장소(repository)에 .git으로 끝나는 디렉토리를 만든다. 그리고 만든 디렉토리로 이동하여 프로젝트를 위한 git 저장소를 초기화한다.
git@fox:~/Repo$ mkdir foxx.git git@fox:~/Repo$ cd foxx.git git@fox:~/Repo/foxx.git$ git init --bare Initialized empty Git repository in /home/git/Repo/foxx.git/
ls로 확인해보면 아래와 같은 디렉토리와 화일들이 생성된 것을 볼 수 있다.
git@fox:~/Repo/foxx.git$ ls -l total 32 drwxrwxr-x 2 git git 4096 Aug 27 01:09 branches -rw-rw-r-- 1 git git 66 Aug 27 01:09 config -rw-rw-r-- 1 git git 73 Aug 27 01:09 description -rw-rw-r-- 1 git git 23 Aug 27 01:09 HEAD drwxrwxr-x 2 git git 4096 Aug 27 01:09 hooks drwxrwxr-x 2 git git 4096 Aug 27 01:09 info drwxrwxr-x 4 git git 4096 Aug 27 01:09 objects drwxrwxr-x 4 git git 4096 Aug 27 01:09 refs
6. git을 이용하기(윈도우)
여기에서는 d:\Git 디렉토리 밑에 위 서버이 프로젝트를 복사한다. dir로 확인해보면, foxx 디텍토리가 만들어진 것을 볼 수있다.
D:\Git>git clone ssh://git@192.168.0.6:/home/git/Repo/foxx.git Cloning into 'foxx'... git@192.168.0.6's password: warning: You appear to have cloned an empty repository. D:\Git>dir D 드라이브의 볼륨: 로컬 디스크 볼륨 일련 번호: 5821-F136 D:\Git 디렉터리 2018-08-27 월 오후 12:58 <DIR> . 2018-08-27 월 오후 12:58 <DIR> .. 2018-08-27 월 오후 12:58 <DIR> foxx 0개 파일 0 바이트 3개 디렉터리 427,610,558,464 바이트 남음
* 화일 생성후 push 하기
윈도우PC 에서 git 프로젝트 디렉토리로 이동후에 readme.txt 화일을 만든다.
D:\Git>cd foxx D:\Git\foxx>dir/w D 드라이브의 볼륨: 로컬 디스크 볼륨 일련 번호: 5821-F136 D:\Git\foxx 디렉터리 [.] [..] readme.txt 1개 파일 39 바이트 2개 디렉터리 427,610,558,464 바이트 남음 D:\Git\foxx>type readme.txt my 1'st git project
만든화일을 git 인덱스 등록
D:\Git\foxx>git add *
변경내용을 확정(commit)하려고 하는데, 아래처럼 global 설정오류가 발생한다.
D:\Git\foxx>git commit -m "first git test..." *** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. fatal: unable to auto-detect email address
global 설정을 해준다.
D:\Git\foxx>git config --global user.email "snowffox@example.com" D:\Git\foxx>git config --global user.name "snowfox"
서버로 변경사항 push 했을때 아래 오류 발생
D:\Git\foxx>git push origin master error: src refspec master does not match any. error: failed to push some refs to 'ssh://git@192.168.0.6:/home/git/Repo/foxx.git'
다시 아래 과정을 실행했다.
D:\Git\foxx>git add readme.txt D:\Git\foxx>git commit -m "first git" [master (root-commit) 798dcbf] first git 1 file changed, 4 insertions(+) create mode 100644 readme.txt D:\Git\foxx>git commit -m "first git file" 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 tree clean D:\Git\foxx>git branch --unset-upstream D:\Git\foxx>git push fatal: The current branch master has no upstream branch. To push the current branch and set the remote as upstream, use git push --set-upstream origin master D:\Git\foxx>git push --set-upstream origin master git@192.168.0.6's password: Enumerating objects: 3, done. Counting objects: 100% (3/3), done. Writing objects: 100% (3/3), 242 bytes | 60.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To ssh://192.168.0.6:/home/git/Repo/foxx.git * [new branch] master -> master Branch 'master' set up to track remote branch 'master' from 'origin'.
이제 로컬(윈도우PC)의 프로젝트 디렉토리를 삭제하고, git 서버에서 프로젝트를 가져와본다.
D:\Git>rm -rf foxx D:\Git>dir D 드라이브의 볼륨: 로컬 디스크 볼륨 일련 번호: 5821-F136 D:\Git 디렉터리 2018-08-27 월 오후 01:33 <DIR> . 2018-08-27 월 오후 01:33 <DIR> .. 0개 파일 0 바이트 2개 디렉터리 427,610,599,424 바이트 남음 D:\Git> D:\Git>git clone ssh://git@192.168.0.6:/home/git/Repo/foxx.git Cloning into 'foxx'... git@192.168.0.6's password: remote: Counting objects: 3, done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), done. D:\Git>dir D 드라이브의 볼륨: 로컬 디스크 볼륨 일련 번호: 5821-F136 D:\Git 디렉터리 2018-08-27 월 오후 01:34 <DIR> . 2018-08-27 월 오후 01:34 <DIR> .. 2018-08-27 월 오후 01:34 <DIR> foxx 0개 파일 0 바이트 3개 디렉터리 427,610,550,272 바이트 남음 D:\Git>cd foxx D:\Git\foxx>dir D 드라이브의 볼륨: 로컬 디스크 볼륨 일련 번호: 5821-F136 D:\Git\foxx 디렉터리 2018-08-27 월 오후 01:34 <DIR> . 2018-08-27 월 오후 01:34 <DIR> .. 2018-08-27 월 오후 01:34 39 readme.txt 1개 파일 39 바이트 2개 디렉터리 427,610,550,272 바이트 남음 D:\Git\foxx>type readme.txt my 1'st git project just for test. D:\Git\foxx> D:\Git>
7. git 이용하기(Linux)
Linux 계정에서 이미 있는 디렉토리를 git 서버에 등록하고 이용하기
/home/snowfox/foxx 디레토리에 Django 프로젝트있음.
* git 저장소에 프로젝트 생성
git@fox:~$ mkdir -p Repo/djangoblog.git git@fox:~/Repo$ cd Repo/djangoblog.git/ git@fox:~/Repo/djangoblog.git$ git init --bare Initialized empty Git repository in /home/git/Repo/djangoblog.git/
* 기존 프로젝트(django blog 학습용)디렉토리에서(userID: snowfox)
snowfox@fox:~/foxx$ pwd /home/snowfox/foxx snowfox@fox:~/foxx$ git init Initialized empty Git repository in /home/snowfox/foxx/.git/ snowfox@fox:~/foxx$ git add . snowfox@fox:~/foxx$ git commit -m "django test project blog" *** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. fatal: unable to auto-detect email address (got 'snowfox@fox.(none)')
마친가지로 git 글로벌 설정을 해준다.
snowfox@fox:~/foxx$ git config --global user.email "snowffox@example.com" snowfox@fox:~/foxx$ git config --global user.name "snowfox"
다시 commit 한다.
snowfox@fox:~/foxx$ git commit -m "Django test project - blog" ... create mode 120000 lib/python3.6/types.py create mode 120000 lib/python3.6/warnings.py create mode 120000 lib/python3.6/weakref.py create mode 100755 manage.py create mode 100644 pip-selfcheck.json
* 서버에 push 한다.
snowfox@fox:~/foxx$ git push --set-upstream ssh://git@192.168.0.6:/home/git/Repo/djangoblog.git master The authenticity of host '192.168.0.6 (192.168.0.6)' can't be established. ECDSA key fingerprint is SHA256:8Ph0P9LOsL46vf/ROwcNKsFXRzmctb6g207p6y6/2ls. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '192.168.0.6' (ECDSA) to the list of known hosts. git@192.168.0.6's password: Counting objects: 8121, done. Compressing objects: 100% (4911/4911), done. Writing objects: 100% (8121/8121), 12.21 MiB | 9.73 MiB/s, done. Total 8121 (delta 2125), reused 8121 (delta 2125) remote: Resolving deltas: 100% (2125/2125), done. To ssh://192.168.0.6:/home/git/Repo/djangoblog.git * [new branch] master -> master Branch 'master' set up to track remote branch 'master' from 'ssh://git@192.168.0.6:/home/git/Repo/djangoblog.git'.
윈도우PC에서 등록된 djangoblog 프로젝트를 복사해 본다.
D:\Git>git clone ssh://git@192.168.0.6:/home/git/Repo/djangotest.git Cloning into 'djangotest'... git@192.168.0.6's password: fatal: '/home/git/Repo/djangotest.git' does not appear to be a git repository fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. D:\Git>git clone ssh://git@192.168.0.6:/home/git/Repo/djangoblog.git Cloning into 'djangoblog'... git@192.168.0.6's password: remote: Counting objects: 8121, done. remote: Compressing objects: 100% (4911/4911), done. remote: Total 8121 (delta 2125), reused 8121 (delta 2125) Receiving objects: 100% (8121/8121), 12.21 MiB | 15.23 MiB/s, done. Resolving deltas: 100% (2125/2125), done. Checking out files: 100% (5935/5935), done. D:\Git>
잘 된다!
참고문서:
https://rogerdudler.github.io/git-guide/index.ko.html
https://backlog.com/git-tutorial/kr/intro/intro4_2.html