티스토리 뷰
http://toroid.org/ams/git-website-howto
내 웹사이트 HTML 소스가 내 로컬 작업머신의 Git 저장소에 존재.
이 페이지는 어떻게 "git push web" 명령 실행으로 변경을 설정하는지 기술한다.
온라인 요약: 작업트리에서 분리된 원격 저장소에 push 하고, post-receive
hook 에서 "git checkout -f
" 실행.
로컬 저장소
$ mkdir website && cd website
$ git init
Initialized empty Git repository in /home/ams/website/.git/
$ echo 'Hello, world!' > index.html
$ git add index.html
$ git commit -q -m "The humble beginnings of my web site."
어쨌든, 어떻게든 도달했다면, 웹사이트 내 변형하고 싶은 내용들 저장소를 가지게 된다.
원격 저장소
다음을 가정한다 the web site will live on a server to which you have ssh access, and that things are set up so that you can ssh to it without having to type a password (예, 공개키가 ~/.ssh/authorized_keys
에 있고 ssh-agent
내부적으로 실행중).
서버에서, 로컬의 미러 저장소를 새로 생성.
$ mkdir website.git && cd website.git
$ git init --bare
Initialized empty Git repository in /home/ams/website.git/
그 후 웹서버의 DocumentRoot (존재하는 디렉토리여야 함; Git이 생성해주지는 않음) 내 최종 트리를 체크아웃하는 post-receive hook 정의 (하고 실행설정):
$ mkdir /var/www/www.example.org
$ cat > hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f
$ chmod +x hooks/post-receive
주: 이 하우투의 이전버젼은 다음의 git config 변수 설정에 의존 : core.worktree를 디상 디렉토리로, core.bare 를 false 로, receive.denycurrentbranch 를 ignore 로. 허나 GIT_WORK_TREE (하우투를 처음 썼을땐 동작하지 않았던곳) 사용한다면 이런 변경들은 필요없고 원격저장소엔 bare 가 남아 있을 수 있다.
윈도우의 경우 git bash 에서 c: 는 /c/ 로 표현되므로
예를들어본다면 /c/www/www.example.org 로 입력하면 됨.
작업머신으로 돌아가서, 원격 미러 이름 정의 > 그것을 미러링 > 거기에 새 "master
" 브랜치 생성.
$ git remote add web ssh://server.example.org/home/ams/website.git
$ git push web +master:refs/heads/master
서버에서, 이제 어떠한.git
메타데이터와도 독립적으로 /var/www/www.example.org
에 파일복제본들을 가지고 있어야 함.
업데이트 처리과정
간단. 로컬 저장소에서, 다음을 실행
$ git push web
원격 저장소에 새 커밋을 전송할것이며, post-receive
hook 에서 즉시 DocumentRoot
를 업데이트 할것임.
(서버에서 원격 작업머신으로 정의하고, 수동이나 cron job 으로 "git pull
" 실행하는것보다 손쉽고, 작업머신에 ssh로 접속되도록 하는 따위가 필요치 않다.)
노트
몇가지 더 언급할것들.
우선, 작업트리 (/var/www/www.example.org
위에) 는 훅을 실행하는 사용자로부터 쓰여져야 한다 (또는 git checkout -f 접근에 sudo 가 필요하거나 비스므리한).
또한, 작업트리가 정확히 DocumentRoot 일 필요는 없다
. Your repository may represent only a subdirectory of it, or even contain it as a subdirectory.
In the work tree, you will need to set the environment variable GIT_DIR
to the path to website.git
before you can run any git commands (e.g. "git status
").
Setting receive.denycurrentbranch
to "ignore
" on the server eliminates a warning issued by recent versions of git when you push an update to a checked-out branch on the server. (Thanks to Miklos Vajna for pointing this out.)
You can push to more than one remote repository by adding more URLs under the [remote "web"]
section in your .git/config
.
[remote "web"]
url = ssh://server.example.org/home/ams/website.git
url = ssh://other.example.org/home/foo/website.git
There are also other hooks. See githooks(5) for details. For example, you could usepre-receive
to accept or deny a push based on the results of an HTML validator. Or you could do more work in the post-receive
hook (such as send email to co-maintainers; see contrib/hooks/post-receive-email
).
I wrote this after reading Daniel Miessler's piece on Using Git to maintain your website. He pushes to a bare repository on the server and pulls changes into a second clone that is used as the DocumentRoot. My implementation has fewer moving parts, and keeps .git separate from the DocumentRoot.
Note: some people have reported that this strategy doesn't work under git 1.5.4.3 (because the git checkout -f
fails). I know it does work with 1.6.x. I haven't investigated further.
'웹프로그래밍' 카테고리의 다른 글
Chrome 개발자 도구에서 함수명으로 정의 찾기/조회 (0) | 2015.01.15 |
---|---|
Git 초기작업 Barebone 예제 (0) | 2015.01.06 |
IE6 IE7 접근시 최신브라우저로 업데이트 해달라고 강력하게 안내하기 (0) | 2013.06.16 |
정규표현식으로 온전한 단어 찾기 (0) | 2013.06.14 |
CKEditor v3~4 크롬에서 문장 앞 공백 제거시 span font-size: 13px 붙는 현상 해결 (0) | 2013.05.11 |
- Total
- Today
- Yesterday
- Make Use Of
- How to geek
- 인터넷 통계정보 검색시스템
- 트위터 공유 정보모음
- 웹표준KR
- 치우의 컴맹탈출구
- Dev. Cheat Sheets
- w3schools
- Dev. 조각들
- ASP Ajax Library
- CSS Tricks
- WebResourcesDepot
- jQuery Selectors Tester
- DeveloperSnippets
- Smashing Magazine
- Nettuts+
- devListing
- 웹 리소스 사이트(한)
- Mobile tuts+
- Dream In Code
- Developer Tutorials
- CSS3 Previews
- 자북
- 안드로이드 사이드
- Code Visually
- Code School
- SQLer.com
- 무료 파워포인트 템플릿
- iconPot
- Free PowerPoint Templates
- Design Bombs
- Web Designer Wall
- 1st Webdesigner
- Vandelay Design
- 무료 벡터 이미지 사이트들
- Tripwire Magazine
- Web TrendSet
- WebMonkey
- 윤춘근 프리젠테이션 디자이너 블로그
- cz.cc 무료 DNS
- [웹하드] MediaFire
- [웹하드] DivShare
- 한컴 인터넷 오피스
- Linux
- sencha touch
- Docker
- IE
- JQuery
- ASP
- 워드프레스
- classic asp
- Wordpress
- 안드로이드
- javascript
- centos
- laravel
- PHP
- iphone
- git
- iis
- Debug
- Mac
- Chrome
- Prototype
- CSS
- IOS
- 한글
- mssql
- Android
- API
- nginx
- JSON
- nodejs
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |