홈 › GitHub › 01 / 5

GitHub 시작

섹션 7진행 0 / 5

3. 코드 예제

예제 1: SSH 키 만들기와 설정 파일 — 01_start.sh 발췌

bash
ssh-keygen -t ed25519 -N "" -f "$WORK/id_ed25519" -C [email protected] -q
ls "$WORK"/id_ed25519* | mask

cat > "$WORK/sshconf/config" <<'EOF'
Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes
EOF
cat "$WORK/sshconf/config"
text
WORK/id_ed25519
WORK/id_ed25519.pub

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519
  IdentitiesOnly yes

-N "" 은 비밀문구(passphrase) 없이 키를 만드는 옵션이라 실습에만 씁니다. 개인키(id_ed25519)와 공개키(id_ed25519.pub) 두 파일이 생기고, 등록에는 .pub 파일만 씁니다.

예제 2: 새 저장소 만들기와 클론 — 01_start.sh 발췌

bash
git init -q --bare -b main "$REMOTE_INIT"
git clone -q "$REMOTE_INIT" "$WORK/init-wizard"
cd "$WORK/init-wizard"
echo "# study" > README.md
echo "*.class" > .gitignore
echo "MIT License" > LICENSE
git add README.md .gitignore LICENSE
git commit -q -m "커밋1: 초기 커밋 (README, .gitignore, LICENSE 추가)"
git push -q origin main
text
warning: You appear to have cloned an empty repository.

REMOTE_INIT 은 GitHub 의 "New repository" 화면 역할을 하는 로컬 bare 저장소입니다. 빈 저장소를 clone 하면 이 경고가 뜨고, README·.gitignore·LICENSE 초기화 체크박스가 만드는 첫 커밋을 여기서는 수동으로 재현했습니다.

이어서 완성된 저장소를 다시 클론합니다.

bash
git clone -q "$REMOTE_INIT" "$WORK/clone1"
cd "$WORK/clone1"
ls
git log --oneline
git remote -v
text
LICENSE
README.md
0184d64 커밋1: 초기 커밋 (README, .gitignore, LICENSE 추가)
origin	WORK/github-init.git (fetch)
origin	WORK/github-init.git (push)

ls 결과에 .gitignore 는 보이지 않지만 실제로는 존재합니다. ls 가 기본으로 숨김 파일을 표시하지 않기 때문이며 ls -a 로 확인할 수 있습니다.

예제 3: 기존 프로젝트 올리기 — 01_start.sh 발췌

bash
git init -q --bare -b main "$REMOTE_EMPTY"
cd "$WORK/existing-project"
git init -q -b main
git add README.md src/Main.java
git commit -q -m "커밋1: 기존 프로젝트 첫 커밋"
git remote add origin "$REMOTE_EMPTY"
git remote -v
git push -u -q origin main
git branch -vv
text
origin	WORK/github-empty.git (fetch)
origin	WORK/github-empty.git (push)
* main 01e45be [origin/main] 커밋1: 기존 프로젝트 첫 커밋

REMOTE_EMPTY 는 초기화 옵션을 모두 끄고 만든 빈 저장소 역할입니다. 이 경우 로컬에 커밋이 있어야 push 가 가능하고, -u 덕분에 branch -vv 에 [origin/main] 추적 표시가 바로 나타납니다.

예제 4: remote set-url 로 주소 전환 — 01_start.sh 발췌

bash
cd "$WORK/clone1"
git remote -v
git remote set-url origin "https://github.example.com/kim/study.git"
git remote -v
git remote set-url origin "[email protected]:kim/study.git"
git remote -v
text
origin	WORK/github-init.git (fetch)
origin	WORK/github-init.git (push)
origin	https://github.example.com/kim/study.git (fetch)
origin	https://github.example.com/kim/study.git (push)
origin	[email protected]:kim/study.git (fetch)
origin	[email protected]:kim/study.git (push)

로컬 커밋 이력은 그대로 두고 주소 문자열만 바뀝니다. 실제 GitHub 주소라면 이 뒤에 git fetch 를 실행해 새 주소로 실제 통신이 되는지 확인합니다.