CINXE.COM

Git - Git 설정하기

<!DOCTYPE html> <html lang="ko"> <head> <meta charset='utf-8'> <meta content='IE=edge,chrome=1' http-equiv='X-UA-Compatible'> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Git - Git 설정하기</title> <link href="/favicon.ico" rel='shortcut icon' type='image/x-icon'> <link rel="stylesheet" href="/application.min.css"> <script src="/js/modernizr.js"></script> <script src="/js/modernize.js"></script> </head> <body id="documentation"> <div class="inner"> <header> <a href="/"><img src="/images/logo@2x.png" width="110" height="46" alt="Git" /></a> <span id="tagline"></span> <script type="text/javascript"> const taglines = [ "fast-version-control", "everything-is-local", "distributed-even-if-your-workflow-isnt", "local-branching-on-the-cheap", "distributed-is-the-new-centralized" ]; var tagline = taglines[Math.floor(Math.random() * taglines.length)]; document.getElementById('tagline').innerHTML = '--' + tagline; </script> <form id="search" action="/search/results"> <input id="search-text" name="search" placeholder="Type / to search entire site…" autocomplete="off" type="text" /> </form> <div id="search-results"></div> </header> </div> <div class="inner"> <div id="content-wrapper"> <div tabindex="1" class="sidebar-btn"></div> <aside class="sidebar" id="sidebar"> <nav> <ul> <li> <a href="/about">About</a> <ul> </ul> </li> <li> <a href="/doc" class="active">Documentation</a> <ul class="expanded"> <li> <a href="/docs">Reference</a> </li> <li> <a href="/book" class="active">Book</a> </li> <li> <a href="/videos">Videos</a> </li> <li> <a href="/doc/ext">External Links</a> </li> </ul> </li> <li> <a href="/downloads">Downloads</a> <ul > <li> <a href="/downloads/guis">GUI Clients</a> </li> <li> <a href="/downloads/logos">Logos</a> </li> </ul> </li> <li> <a href="/community">Community</a> </li> </ul> <hr class="sidebar"> <p> This book is available in <a href="/book/en/v2/Customizing-Git-Git-Configuration">English</a>. </p> <p> Full translation available in <table> <tr><td><a href="/book/az/v2/Git%e2%80%99i-F%c9%99rdil%c9%99%c5%9fdirm%c9%99k-Git-Konfiqurasiyas%c4%b1">azərbaycan dili</a>,</td></tr> <tr><td><a href="/book/bg/v2/Git-%d0%bd%d0%b0-%d0%bd%d0%b8%d1%81%d0%ba%d0%be-%d0%bd%d0%b8%d0%b2%d0%be-Plumbing-%d0%b8-Porcelain-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8">български език</a>,</td></tr> <tr><td><a href="/book/de/v2/Git-einrichten-Git-Konfiguration">Deutsch</a>,</td></tr> <tr><td><a href="/book/es/v2/Personalizaci%c3%b3n-de-Git-Configuraci%c3%b3n-de-Git">Español</a>,</td></tr> <tr><td><a href="/book/fr/v2/Personnalisation-de-Git-Configuration-de-Git">Français</a>,</td></tr> <tr><td><a href="/book/gr">Ελληνικά</a>,</td></tr> <tr><td><a href="/book/ja/v2/Git-%e3%81%ae%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba-Git-%e3%81%ae%e8%a8%ad%e5%ae%9a">日本語</a>,</td></tr> <tr><td><a href="/book/ko/v2/Git%eb%a7%9e%ec%b6%a4-Git-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0">한국어</a>,</td></tr> <tr><td><a href="/book/nl/v2/Git-aanpassen-Git-configuratie">Nederlands</a>,</td></tr> <tr><td><a href="/book/ru/v2/%d0%9d%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-Git-%d0%9a%d0%be%d0%bd%d1%84%d0%b8%d0%b3%d1%83%d1%80%d0%b0%d1%86%d0%b8%d1%8f-Git">Русский</a>,</td></tr> <tr><td><a href="/book/sl/v2/Prilagoditev-Gita-Konfiguracija-Git">Slovenščina</a>,</td></tr> <tr><td><a href="/book/tl/v2/Pag-aangkop-sa-Sariling-Pangangailagan-ng-Git-Kompigurasyon-ng-Git">Tagalog</a>,</td></tr> <tr><td><a href="/book/uk/v2/%d0%9d%d0%b0%d0%bb%d0%b0%d1%88%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-Git-%d0%9a%d0%be%d0%bd%d1%84%d1%96%d0%b3%d1%83%d1%80%d0%b0%d1%86%d1%96%d1%8f-Git">Українська</a></td></tr> <tr><td><a href="/book/zh/v2/%e8%87%aa%e5%ae%9a%e4%b9%89-Git-%e9%85%8d%e7%bd%ae-Git">简体中文</a>,</td></tr> </table> </p> <p> Partial translations available in <table> <tr><td><a href="/book/cs/v2/Customizing-Git-Git-Configuration">Čeština</a>,</td></tr> <tr><td><a href="/book/mk/v2/%d0%9f%d0%b5%d1%80%d1%81%d0%be%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%98%d0%b0-%d0%bd%d0%b0-Git-Git-Configuration">Македонски</a>,</td></tr> <tr><td><a href="/book/pl/v2/Dostosowywanie-Gita-Konfiguracja-Gita">Polski</a>,</td></tr> <tr><td><a href="/book/sr/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%b0%d0%b3%d0%be%d1%92%d0%b0%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%b0-%d0%93%d0%b8%d1%82-%d0%9a%d0%be%d0%bd%d1%84%d0%b8%d0%b3%d1%83%d1%80%d0%b8%d1%81%d0%b0%d1%9a%d0%b5-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%b0-%d0%93%d0%b8%d1%82">Српски</a>,</td></tr> <tr><td><a href="/book/uz/v2/Customizing-Git-Git-Configuration">Ўзбекча</a>,</td></tr> <tr><td><a href="/book/zh-tw/v2/Customizing-Git-Git-Configuration">繁體中文</a>,</td></tr> </table> </p> <p> Translations started for <table> <tr><td><a href="/book/be/v2/Customizing-Git-Git-Configuration">Беларуская</a>,</td></tr> <tr><td><a href="/book/fa/v2/Customizing-Git-Git-Configuration" dir="rtl">فارسی</a>,</td></tr> <tr><td><a href="/book/id/v2/Kostumisasi-Git-Konfigurasi-Git">Indonesian</a>,</td></tr> <tr><td><a href="/book/it/v2/Customizing-Git-Git-Configuration">Italiano</a>,</td></tr> <tr><td><a href="/book/ms/v2/Customizing-Git-Git-Configuration">Bahasa Melayu</a>,</td></tr> <tr><td><a href="/book/pt-br/v2/Customizing-Git-Git-Configuration">Português (Brasil)</a>,</td></tr> <tr><td><a href="/book/pt-pt/v2/Personalizar-o-Git-Git-Configuration">Português (Portugal)</a>,</td></tr> <tr><td><a href="/book/sv/v2/Customizing-Git-Git-Configuration">Svenska</a>,</td></tr> <tr><td><a href="/book/tr/v2/Git%e2%80%99i-%c3%96zelle%c5%9ftirmek-Git-Yap%c4%b1land%c4%b1rmas%c4%b1">Türkçe</a>.</td></tr> </table> </p> <hr class="sidebar"/> <p> The source of this book is <a href="https://github.com/progit/progit2-ko">hosted on GitHub.</a></br> Patches, suggestions and comments are welcome. </p> </nav> </aside> <div id="content"> <div id="book-chapters"> <a class="dropdown-trigger" id="book-chapters-trigger" data-panel-id="chapters-dropdown" href="#">Chapters ▾</a> <div class='dropdown-panel' id='chapters-dropdown'> <div class='three-column'> <div class="column-left"> <ol class='book-toc'> <li class='chapter'> <h2>1. <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-%eb%b2%84%ec%a0%84-%ea%b4%80%eb%a6%ac%eb%9e%80%3F">시작하기</a></h2> <ol> <li> 1.1 <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-%eb%b2%84%ec%a0%84-%ea%b4%80%eb%a6%ac%eb%9e%80%3F">버전 관리란?</a> </li> <li> 1.2 <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-%ec%a7%a7%ea%b2%8c-%eb%b3%b4%eb%8a%94-Git%ec%9d%98-%ec%97%ad%ec%82%ac">짧게 보는 Git의 역사</a> </li> <li> 1.3 <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-Git-%ea%b8%b0%ec%b4%88">Git 기초</a> </li> <li> 1.4 <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-CLI">CLI</a> </li> <li> 1.5 <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-Git-%ec%84%a4%ec%b9%98">Git 설치</a> </li> <li> 1.6 <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-Git-%ec%b5%9c%ec%b4%88-%ec%84%a4%ec%a0%95">Git 최초 설정</a> </li> <li> 1.7 <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-%eb%8f%84%ec%9b%80%eb%a7%90-%eb%b3%b4%ea%b8%b0">도움말 보기</a> </li> <li> 1.8 <a href="/book/ko/v2/%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>2. <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-Git-%ec%a0%80%ec%9e%a5%ec%86%8c-%eb%a7%8c%eb%93%a4%ea%b8%b0">Git의 기초</a></h2> <ol> <li> 2.1 <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-Git-%ec%a0%80%ec%9e%a5%ec%86%8c-%eb%a7%8c%eb%93%a4%ea%b8%b0">Git 저장소 만들기</a> </li> <li> 2.2 <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-%ec%88%98%ec%a0%95%ed%95%98%ea%b3%a0-%ec%a0%80%ec%9e%a5%ec%86%8c%ec%97%90-%ec%a0%80%ec%9e%a5%ed%95%98%ea%b8%b0">수정하고 저장소에 저장하기</a> </li> <li> 2.3 <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-%ec%bb%a4%eb%b0%8b-%ed%9e%88%ec%8a%a4%ed%86%a0%eb%a6%ac-%ec%a1%b0%ed%9a%8c%ed%95%98%ea%b8%b0">커밋 히스토리 조회하기</a> </li> <li> 2.4 <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-%eb%90%98%eb%8f%8c%eb%a6%ac%ea%b8%b0">되돌리기</a> </li> <li> 2.5 <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-%eb%a6%ac%eb%aa%a8%ed%8a%b8-%ec%a0%80%ec%9e%a5%ec%86%8c">리모트 저장소</a> </li> <li> 2.6 <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-%ed%83%9c%ea%b7%b8">태그</a> </li> <li> 2.7 <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-Git-Alias">Git Alias</a> </li> <li> 2.8 <a href="/book/ko/v2/Git%ec%9d%98-%ea%b8%b0%ec%b4%88-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>3. <a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-%eb%b8%8c%eb%9e%9c%ec%b9%98%eb%9e%80-%eb%ac%b4%ec%97%87%ec%9d%b8%ea%b0%80">Git 브랜치</a></h2> <ol> <li> 3.1 <a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-%eb%b8%8c%eb%9e%9c%ec%b9%98%eb%9e%80-%eb%ac%b4%ec%97%87%ec%9d%b8%ea%b0%80">브랜치란 무엇인가</a> </li> <li> 3.2 <a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-%eb%b8%8c%eb%9e%9c%ec%b9%98%ec%99%80-Merge-%ec%9d%98-%ea%b8%b0%ec%b4%88">브랜치와 Merge 의 기초</a> </li> <li> 3.3 <a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-%eb%b8%8c%eb%9e%9c%ec%b9%98-%ea%b4%80%eb%a6%ac">브랜치 관리</a> </li> <li> 3.4 <a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-%eb%b8%8c%eb%9e%9c%ec%b9%98-%ec%9b%8c%ed%81%ac%ed%94%8c%eb%a1%9c">브랜치 워크플로</a> </li> <li> 3.5 <a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-%eb%a6%ac%eb%aa%a8%ed%8a%b8-%eb%b8%8c%eb%9e%9c%ec%b9%98">리모트 브랜치</a> </li> <li> 3.6 <a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-Rebase-%ed%95%98%ea%b8%b0">Rebase 하기</a> </li> <li> 3.7 <a href="/book/ko/v2/Git-%eb%b8%8c%eb%9e%9c%ec%b9%98-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>4. <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-%ed%94%84%eb%a1%9c%ed%86%a0%ec%bd%9c">Git 서버</a></h2> <ol> <li> 4.1 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-%ed%94%84%eb%a1%9c%ed%86%a0%ec%bd%9c">프로토콜</a> </li> <li> 4.2 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-%ec%84%9c%eb%b2%84%ec%97%90-Git-%ec%84%a4%ec%b9%98%ed%95%98%ea%b8%b0">서버에 Git 설치하기</a> </li> <li> 4.3 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-SSH-%ea%b3%b5%ea%b0%9c%ed%82%a4-%eb%a7%8c%eb%93%a4%ea%b8%b0">SSH 공개키 만들기</a> </li> <li> 4.4 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-%ec%84%9c%eb%b2%84-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0">서버 설정하기</a> </li> <li> 4.5 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-Git-%eb%8d%b0%eb%aa%ac">Git 데몬</a> </li> <li> 4.6 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-%ec%8a%a4%eb%a7%88%ed%8a%b8-HTTP">스마트 HTTP</a> </li> <li> 4.7 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-GitWeb">GitWeb</a> </li> <li> 4.8 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-GitLab">GitLab</a> </li> <li> 4.9 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-%eb%98%90-%eb%8b%a4%eb%a5%b8-%ec%84%a0%ed%83%9d%ec%a7%80,-%ed%98%b8%ec%8a%a4%ed%8c%85">또 다른 선택지, 호스팅</a> </li> <li> 4.10 <a href="/book/ko/v2/Git-%ec%84%9c%eb%b2%84-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>5. <a href="/book/ko/v2/%eb%b6%84%ec%82%b0-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c%ec%9d%98-Git-%eb%b6%84%ec%82%b0-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c%ec%9d%98-%ec%9b%8c%ed%81%ac%ed%94%8c%eb%a1%9c">분산 환경에서의 Git</a></h2> <ol> <li> 5.1 <a href="/book/ko/v2/%eb%b6%84%ec%82%b0-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c%ec%9d%98-Git-%eb%b6%84%ec%82%b0-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c%ec%9d%98-%ec%9b%8c%ed%81%ac%ed%94%8c%eb%a1%9c">분산 환경에서의 워크플로</a> </li> <li> 5.2 <a href="/book/ko/v2/%eb%b6%84%ec%82%b0-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c%ec%9d%98-Git-%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8%ec%97%90-%ea%b8%b0%ec%97%ac%ed%95%98%ea%b8%b0">프로젝트에 기여하기</a> </li> <li> 5.3 <a href="/book/ko/v2/%eb%b6%84%ec%82%b0-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c%ec%9d%98-Git-%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-%ea%b4%80%eb%a6%ac%ed%95%98%ea%b8%b0">프로젝트 관리하기</a> </li> <li> 5.4 <a href="/book/ko/v2/%eb%b6%84%ec%82%b0-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c%ec%9d%98-Git-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> </ol> </div> <div class='column-middle'> <ol class='book-toc'> <li class='chapter'> <h2>6. <a href="/book/ko/v2/GitHub-%ea%b3%84%ec%a0%95-%eb%a7%8c%eb%93%a4%ea%b3%a0-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0">GitHub</a></h2> <ol> <li> 6.1 <a href="/book/ko/v2/GitHub-%ea%b3%84%ec%a0%95-%eb%a7%8c%eb%93%a4%ea%b3%a0-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0">계정 만들고 설정하기</a> </li> <li> 6.2 <a href="/book/ko/v2/GitHub-GitHub-%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8%ec%97%90-%ea%b8%b0%ec%97%ac%ed%95%98%ea%b8%b0">GitHub 프로젝트에 기여하기</a> </li> <li> 6.3 <a href="/book/ko/v2/GitHub-GitHub-%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-%ea%b4%80%eb%a6%ac%ed%95%98%ea%b8%b0">GitHub 프로젝트 관리하기</a> </li> <li> 6.4 <a href="/book/ko/v2/GitHub-Organization-%ea%b4%80%eb%a6%ac%ed%95%98%ea%b8%b0">Organization 관리하기</a> </li> <li> 6.5 <a href="/book/ko/v2/GitHub-GitHub-%ec%8a%a4%ed%81%ac%eb%a6%bd%ed%8c%85">GitHub 스크립팅</a> </li> <li> 6.6 <a href="/book/ko/v2/GitHub-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>7. <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%eb%a6%ac%eb%b9%84%ec%a0%84-%ec%a1%b0%ed%9a%8c%ed%95%98%ea%b8%b0">Git 도구</a></h2> <ol> <li> 7.1 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%eb%a6%ac%eb%b9%84%ec%a0%84-%ec%a1%b0%ed%9a%8c%ed%95%98%ea%b8%b0">리비전 조회하기</a> </li> <li> 7.2 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%eb%8c%80%ed%99%94%ed%98%95-%eb%aa%85%eb%a0%b9">대화형 명령</a> </li> <li> 7.3 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-Stashing%ea%b3%bc-Cleaning">Stashing과 Cleaning</a> </li> <li> 7.4 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%eb%82%b4-%ec%9e%91%ec%97%85%ec%97%90-%ec%84%9c%eb%aa%85%ed%95%98%ea%b8%b0">내 작업에 서명하기</a> </li> <li> 7.5 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%ea%b2%80%ec%83%89">검색</a> </li> <li> 7.6 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%ed%9e%88%ec%8a%a4%ed%86%a0%eb%a6%ac-%eb%8b%a8%ec%9e%a5%ed%95%98%ea%b8%b0">히스토리 단장하기</a> </li> <li> 7.7 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-Reset-%eb%aa%85%ed%99%95%ed%9e%88-%ec%95%8c%ea%b3%a0-%ea%b0%80%ea%b8%b0">Reset 명확히 알고 가기</a> </li> <li> 7.8 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%ea%b3%a0%ea%b8%89-Merge">고급 Merge</a> </li> <li> 7.9 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-Rerere">Rerere</a> </li> <li> 7.10 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-Git%ec%9c%bc%eb%a1%9c-%eb%b2%84%ea%b7%b8-%ec%b0%be%ea%b8%b0">Git으로 버그 찾기</a> </li> <li> 7.11 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%ec%84%9c%eb%b8%8c%eb%aa%a8%eb%93%88">서브모듈</a> </li> <li> 7.12 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-Bundle">Bundle</a> </li> <li> 7.13 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-Replace">Replace</a> </li> <li> 7.14 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-Credential-%ec%a0%80%ec%9e%a5%ec%86%8c">Credential 저장소</a> </li> <li> 7.15 <a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>8. <a href="/book/ko/v2/Git%eb%a7%9e%ec%b6%a4-Git-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0">Git맞춤</a></h2> <ol> <li> 8.1 <a href="/book/ko/v2/Git%eb%a7%9e%ec%b6%a4-Git-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0" class="active">Git 설정하기</a> </li> <li> 8.2 <a href="/book/ko/v2/Git%eb%a7%9e%ec%b6%a4-Git-Attributes">Git Attributes</a> </li> <li> 8.3 <a href="/book/ko/v2/Git%eb%a7%9e%ec%b6%a4-Git-Hooks">Git Hooks</a> </li> <li> 8.4 <a href="/book/ko/v2/Git%eb%a7%9e%ec%b6%a4-%ec%a0%95%ec%b1%85-%ea%b5%ac%ed%98%84%ed%95%98%ea%b8%b0">정책 구현하기</a> </li> <li> 8.5 <a href="/book/ko/v2/Git%eb%a7%9e%ec%b6%a4-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>9. <a href="/book/ko/v2/Git%ea%b3%bc-%ec%97%ac%ed%83%80-%eb%b2%84%ec%a0%84-%ea%b4%80%eb%a6%ac-%ec%8b%9c%ec%8a%a4%ed%85%9c-Git:-%eb%b2%94%ec%9a%a9-Client">Git과 여타 버전 관리 시스템</a></h2> <ol> <li> 9.1 <a href="/book/ko/v2/Git%ea%b3%bc-%ec%97%ac%ed%83%80-%eb%b2%84%ec%a0%84-%ea%b4%80%eb%a6%ac-%ec%8b%9c%ec%8a%a4%ed%85%9c-Git:-%eb%b2%94%ec%9a%a9-Client">Git: 범용 Client</a> </li> <li> 9.2 <a href="/book/ko/v2/Git%ea%b3%bc-%ec%97%ac%ed%83%80-%eb%b2%84%ec%a0%84-%ea%b4%80%eb%a6%ac-%ec%8b%9c%ec%8a%a4%ed%85%9c-Git%ec%9c%bc%eb%a1%9c-%ec%98%ae%ea%b8%b0%ea%b8%b0">Git으로 옮기기</a> </li> <li> 9.3 <a href="/book/ko/v2/Git%ea%b3%bc-%ec%97%ac%ed%83%80-%eb%b2%84%ec%a0%84-%ea%b4%80%eb%a6%ac-%ec%8b%9c%ec%8a%a4%ed%85%9c-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>10. <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-Plumbing-%eb%aa%85%eb%a0%b9%ea%b3%bc-Porcelain-%eb%aa%85%eb%a0%b9">Git의 내부</a></h2> <ol> <li> 10.1 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-Plumbing-%eb%aa%85%eb%a0%b9%ea%b3%bc-Porcelain-%eb%aa%85%eb%a0%b9">Plumbing 명령과 Porcelain 명령</a> </li> <li> 10.2 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-Git-%ea%b0%9c%ec%b2%b4">Git 개체</a> </li> <li> 10.3 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-Git-Refs">Git Refs</a> </li> <li> 10.4 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-Packfile">Packfile</a> </li> <li> 10.5 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-Refspec">Refspec</a> </li> <li> 10.6 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-%eb%8d%b0%ec%9d%b4%ed%84%b0-%ec%a0%84%ec%86%a1-%ed%94%84%eb%a1%9c%ed%86%a0%ec%bd%9c">데이터 전송 프로토콜</a> </li> <li> 10.7 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-%ec%9a%b4%ec%98%81-%eb%b0%8f-%eb%8d%b0%ec%9d%b4%ed%84%b0-%eb%b3%b5%ea%b5%ac">운영 및 데이터 복구</a> </li> <li> 10.8 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-%ed%99%98%ea%b2%bd%eb%b3%80%ec%88%98">환경변수</a> </li> <li> 10.9 <a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> </ol> </div> <div class='column-right'> <ol class='book-toc'> <li class='chapter'> <h2>A1. <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-A:-%eb%8b%a4%ec%96%91%ed%95%9c-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c-Git-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-GUI">부록 A: 다양한 환경에서 Git 사용하기</a></h2> <ol> <li> A1.1 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-A:-%eb%8b%a4%ec%96%91%ed%95%9c-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c-Git-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-GUI">GUI</a> </li> <li> A1.2 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-A:-%eb%8b%a4%ec%96%91%ed%95%9c-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c-Git-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-Visual-Studio">Visual Studio</a> </li> <li> A1.3 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-A:-%eb%8b%a4%ec%96%91%ed%95%9c-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c-Git-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-Eclipse">Eclipse</a> </li> <li> A1.4 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-A:-%eb%8b%a4%ec%96%91%ed%95%9c-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c-Git-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-Bash">Bash</a> </li> <li> A1.5 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-A:-%eb%8b%a4%ec%96%91%ed%95%9c-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c-Git-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-Zsh">Zsh</a> </li> <li> A1.6 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-A:-%eb%8b%a4%ec%96%91%ed%95%9c-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c-Git-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-Git-in-Powershell">Git in Powershell</a> </li> <li> A1.7 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-A:-%eb%8b%a4%ec%96%91%ed%95%9c-%ed%99%98%ea%b2%bd%ec%97%90%ec%84%9c-Git-%ec%82%ac%ec%9a%a9%ed%95%98%ea%b8%b0-%ec%9a%94%ec%95%bd">요약</a> </li> </ol> </li> <li class='chapter'> <h2>A2. <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-B:-%ec%95%a0%ed%94%8c%eb%a6%ac%ec%bc%80%ec%9d%b4%ec%85%98%ec%97%90-Git-%eb%84%a3%ea%b8%b0-Git-%eb%aa%85%eb%a0%b9%ec%96%b4">부록 B: 애플리케이션에 Git 넣기</a></h2> <ol> <li> A2.1 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-B:-%ec%95%a0%ed%94%8c%eb%a6%ac%ec%bc%80%ec%9d%b4%ec%85%98%ec%97%90-Git-%eb%84%a3%ea%b8%b0-Git-%eb%aa%85%eb%a0%b9%ec%96%b4">Git 명령어</a> </li> <li> A2.2 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-B:-%ec%95%a0%ed%94%8c%eb%a6%ac%ec%bc%80%ec%9d%b4%ec%85%98%ec%97%90-Git-%eb%84%a3%ea%b8%b0-Libgit2">Libgit2</a> </li> <li> A2.3 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-B:-%ec%95%a0%ed%94%8c%eb%a6%ac%ec%bc%80%ec%9d%b4%ec%85%98%ec%97%90-Git-%eb%84%a3%ea%b8%b0-JGit">JGit</a> </li> <li> A2.4 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-B:-%ec%95%a0%ed%94%8c%eb%a6%ac%ec%bc%80%ec%9d%b4%ec%85%98%ec%97%90-Git-%eb%84%a3%ea%b8%b0-go-git">go-git</a> </li> </ol> </li> <li class='chapter'> <h2>A3. <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-%ec%84%a4%ec%b9%98%ec%99%80-%ec%84%a4%ec%a0%95">부록 C: Git 명령어</a></h2> <ol> <li> A3.1 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-%ec%84%a4%ec%b9%98%ec%99%80-%ec%84%a4%ec%a0%95">설치와 설정</a> </li> <li> A3.2 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-%ed%94%84%eb%a1%9c%ec%a0%9d%ed%8a%b8-%ea%b0%80%ec%a0%b8%ec%98%a4%ea%b8%b0%ec%99%80-%ec%83%9d%ec%84%b1%ed%95%98%ea%b8%b0">프로젝트 가져오기와 생성하기</a> </li> <li> A3.3 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-%ec%8a%a4%eb%83%85%ec%83%b7-%eb%8b%a4%eb%a3%a8%ea%b8%b0">스냅샷 다루기</a> </li> <li> A3.4 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-Branch%ec%99%80-Merge">Branch와 Merge</a> </li> <li> A3.5 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-%ea%b3%b5%ec%9c%a0%ed%95%98%ea%b3%a0-%ec%97%85%eb%8d%b0%ec%9d%b4%ed%8a%b8%ed%95%98%ea%b8%b0">공유하고 업데이트하기</a> </li> <li> A3.6 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-%eb%b3%b4%ea%b8%b0%ec%99%80-%eb%b9%84%ea%b5%90">보기와 비교</a> </li> <li> A3.7 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-Debugging">Debugging</a> </li> <li> A3.8 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-Patch-%ed%95%98%ea%b8%b0">Patch 하기</a> </li> <li> A3.9 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-Email">Email</a> </li> <li> A3.10 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-%eb%8b%a4%eb%a5%b8-%eb%b2%84%ec%a0%84-%ea%b4%80%eb%a6%ac-%ec%8b%9c%ec%8a%a4%ed%85%9c">다른 버전 관리 시스템</a> </li> <li> A3.11 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-%ea%b4%80%eb%a6%ac">관리</a> </li> <li> A3.12 <a href="/book/ko/v2/%eb%b6%80%eb%a1%9d-C:-Git-%eb%aa%85%eb%a0%b9%ec%96%b4-Plumbing-%eb%aa%85%eb%a0%b9%ec%96%b4">Plumbing 명령어</a> </li> </ol> </li> </ol> </div> </div> </div> <span class="light" id="edition"> 2nd Edition </span> </div> <div id="main" data-pagefind-filter="category:book" data-pagefind-meta="category:Book" data-pagefind-weight="0.05" data-pagefind-body class="book edition2"> <h1>8.1 Git맞춤 - Git 설정하기</h1> <div> <p>지금까지 Git이 어떻게 동작하고 Git을 어떻게 사용하는지 설명했다. 이제 Git을 좀 더 쉽고 편하게 사용할 수 있도록 도와주는 도구를 살펴본다. 이 장에서는 먼저 많이 쓰이는 설정 그리고 훅 시스템을 먼저 설명한다. 그 후에 Git을 내게 맞추어(Customize) 본다. Git을 자신의 프로젝트에 맞추고 편하게 사용하자.</p> <h2 id="_git_config">Git 설정하기</h2> <div class="paragraph"> <p></p> </div> <div class="paragraph"> <p><a href="/book/ko/v2/ch00/ch01-getting-started">시작하기</a>에서 <code>git config</code> 명령을 간단히 사용했었다. <code>git config</code> 명령으로 제일 먼저 하게 되는 작업은 이름과 이메일 주소를 설정하는 것이다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com</code></pre> </div> </div> <div class="paragraph"> <p>여기서는 이렇게 설정하는 것 중에서 중요한 것만 몇 가지 배운다.</p> </div> <div class="paragraph"> <p>우선 Git은 내장된 기본 규칙 따르지만, 설정된 것이 있으면 그에 따른다는 점을 생각해두자. Git은 먼저 <code>/etc/gitconfig</code> 파일을 찾는다. 이 파일은 해당 시스템에 있는 모든 사용자와 모든 저장소에 적용되는 설정 파일이다. <code>git config</code> 명령에 <code>--system</code> 옵션을 주면 이 파일을 사용한다.</p> </div> <div class="paragraph"> <p>다음으로 <code>~/.gitconfig</code> 파일을 찾는다. 이 파일은 해당 사용자에게만 적용되는 설정 파일이다. <code>--global</code> 옵션을 주면 Git은 이 파일을 사용한다.</p> </div> <div class="paragraph"> <p>마지막으로 현재 작업 중인 저장소의 Git 디렉토리에 있는 <code>.git/config</code> 파일을 찾는다. 이 파일은 해당 저장소에만 적용된다. <code>git config</code> 명령에 <code>--local</code> 옵션을 적용한 것과 같다. (아무런 범위 옵션을 지정하지 않으면 Git은 기본적으로 <code>--local</code> 옵션을 적용한다)</p> </div> <div class="paragraph"> <p>각 설정 파일에 중복된 설정이 있으면 설명한 “순서대로” 덮어쓴다. 예를 들어 <code>.git/config</code> 와 <code>/etc/gitconfig</code> 에 같은 설정이 들어 있다면 <code>.git/config</code> 에 있는 설정을 사용한다.</p> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <div class="title">노트</div> </td> <td class="content"> <div class="paragraph"> <p>설정 파일 일반적인 텍스트파일로 쉽게 고쳐 쓸 수 있다. 보통 <code>git config</code> 명령을 사용하는 것이 더 편하다.</p> </div> </td> </tr> </table> </div> <div class="sect3"> <h3 id="_클라이언트_설정">클라이언트 설정</h3> <div class="paragraph"> <p>설정이 영향을 미치는 대상에 따라 클라이언트 설정과 서버 설정으로 나눠볼 수 있다. 대부분은 개인작업 환경과 관련된 클라이언트 설정이다. Git에는 설정거리가 매우 많은데, 여기서는 워크플로를 관리하는 데 필요한 것과 주로 많이 사용하는 것만 설명한다. 한 번도 겪지 못할 상황에서나 유용한 옵션까지 다 포함하면 설정할 게 너무 많다. Git 버전마다 옵션이 조금씩 다른데, 아래와 같이 실행하면 설치한 버전에서 사용할 수 있는 옵션을 모두 보여준다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ man git-config</code></pre> </div> </div> <div class="paragraph"> <p>어떤 옵션을 사용할 수 있는지 매우 자세히 설명하고 있다. <a href="http://git-scm.com/docs/git-config.html" class="bare">http://git-scm.com/docs/git-config.html</a> 페이지에서도 같은 내용을 볼 수 있다.</p> </div> <div class="sect4"> <h4 id="_core_editor"><code>core.editor</code></h4> <div class="paragraph"> <p></p> </div> <div class="paragraph"> <p>Git은 편집기를 설정(<code>$VISUAL</code>, <code>$EDITOR</code> 변수로 설정)하지 않았거나 설정한 편집기를 찾을 수 없으면 <code>vi</code> 를 실행한다. 커밋할 때나 태그 메시지를 편집할 때 설정한 편집기를 실행한다. <code>code.editor</code> 설정으로 편집기를 설정한다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global core.editor emacs</code></pre> </div> </div> <div class="paragraph"> <p>이렇게 설정하면 메시지를 편집할 때 환경변수에 설정한 편집기가 아니라 Emacs를 실행한다.</p> </div> </div> <div class="sect4"> <h4 id="_commit_template"><code>commit.template</code></h4> <div class="paragraph"> <p></p> </div> <div class="paragraph"> <p>커밋할 때 Git이 보여주는 커밋 메시지는 이 옵션에 설정한 템플릿 파일이다. 사용자 지정 커밋 템플릿 메시지가 주는 장점은 커밋 메시지를 작성할 때 일정한 스타일을 유지할 수 있다는 점이다.</p> </div> <div class="paragraph"> <p>예를 들어 <code>~/.gitmessage.txt</code> 파일을 아래와 같이 만든다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-text" data-lang="text">Subject line (try to keep under 50 characters) Multi-line description of commit, feel free to be detailed. [Ticket: X]</code></pre> </div> </div> <div class="paragraph"> <p>커밋 메시지 템플릿을 보면 커밋 메시지를 작성할 때 제목은 일정 길이 이하로 짧게 하고(<code>git log --oneline</code> 으로 보기 좋게) 자세한 수정 내용은 한칸 공백 이후 서술하도록 하고 버그 트래킹 시스템이나 이슈 관리 시스템을 쓸 경우 이슈의 번호를 적도록 유도하고 있는 것을 볼 수 있다.</p> </div> <div class="paragraph"> <p>이 파일을 <code>commit.template</code> 에 설정하면 Git은 <code>git commit</code> 명령이 실행하는 편집기에 이 메시지를 기본으로 넣어준다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global commit.template ~/.gitmessage.txt $ git commit</code></pre> </div> </div> <div class="paragraph"> <p>그러면 커밋할 때 아래와 같은 메시지를 편집기에 자동으로 채워준다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-text" data-lang="text">Subject line (try to keep under 60 characters) Multi-line description of commit, feel free to be detailed. [Ticket: X] # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch master # Changes to be committed: # (use "git reset HEAD &lt;file&gt;..." to unstage) # # modified: lib/test.rb # ~ ~ ".git/COMMIT_EDITMSG" 14L, 297C</code></pre> </div> </div> <div class="paragraph"> <p>소속 팀에 커밋 메시지 규칙이 있으면 그 규칙에 맞는 템플릿 파일을 만들고 시스템 설정에 설정해둔다. Git이 그 파일을 사용하도록 설정하면 규칙을 따르기가 쉬워진다.</p> </div> </div> <div class="sect4"> <h4 id="_core_pager"><code>core.pager</code></h4> <div class="paragraph"> <p></p> </div> <div class="paragraph"> <p>Git은 <code>log</code> 나 <code>diff</code> 같은 명령의 메시지를 출력할 때 페이지로 나누어 보여준다. 기본으로 사용하는 명령은 <code>less</code> 다. <code>more</code> 를 더 좋아하면 <code>more</code> 라고 설정한다. 페이지를 나누고 싶지 않으면 빈 문자열로 설정한다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global core.pager ''</code></pre> </div> </div> <div class="paragraph"> <p>이 명령을 실행하면 Git은 길든지 짧든지 결과를 한 번에 다 보여 준다.</p> </div> </div> <div class="sect4"> <h4 id="_user_signingkey"><code>user.signingkey</code></h4> <div class="paragraph"> <p></p> </div> <div class="paragraph"> <p>이 설정은 <a href="/book/ko/v2/ch00/_signing">내 작업에 서명하기</a> 에서 설명했던 Annotated Tag를 만들 때 유용하다. 사용할 GPG 키를 설정해 둘 수 있다. 아래처럼 GPG 키를 설정하면 서명할 때 편리하다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global user.signingkey &lt;gpg-key-id&gt;</code></pre> </div> </div> <div class="paragraph"> <p><code>git tag</code> 명령을 실행할 때 키를 생략하고 서명할 수 있다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git tag -s &lt;tag-name&gt;</code></pre> </div> </div> </div> <div class="sect4"> <h4 id="_core_excludesfile"><code>core.excludesfile</code></h4> <div class="paragraph"> <p></p> </div> <div class="paragraph"> <p>Git에서 <code>git add</code> 명령으로 추적할 파일에 포함하지 않을 파일은 <code>.gitignore</code> 에 해당 패턴을 적으면 된다고 <a href="/book/ko/v2/ch00/_ignoring">파일 무시하기</a>에서 설명했다.</p> </div> <div class="paragraph"> <p>한 저장소 안에서뿐 아니라 어디에서라도 Git에 포함하지 않을 파일을 설정할 수 있다. 예를 들어 Mac을 쓰는 사람이라면 <code>.DS_Store</code> 파일을 자주 보았을 것이다. Emacs나 Vim를 쓰다 보면 이름 끝에 <code>~</code>, <code>.swp</code> 붙여둔 임시 파일도 있다.</p> </div> <div class="paragraph"> <p><code>.gitignore</code> 파일처럼 무시할 파일을 설정할 수 있는데 <code>~/.gitignore_global</code> 파일 안에 아래 내용으로 입력해두고</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-ini" data-lang="ini">*~ .*.swp .DS_Store</code></pre> </div> </div> <div class="paragraph"> <p><code>git config --global core.excludesfile ~/.gitignore_global</code> 명령으로 설정을 추가하면 더는 위와 같은 파일이 포함되지 않을 것이다.</p> </div> </div> <div class="sect4"> <h4 id="_help_autocorrect"><code>help.autocorrect</code></h4> <div class="paragraph"> <p></p> </div> <div class="paragraph"> <p>명령어를 잘못 입력하면 Git은 메시지를 아래와 같이 보여 준다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git chekcout master git: 'chekcout' is not a git command. See 'git --help'. Did you mean this? checkout</code></pre> </div> </div> <div class="paragraph"> <p>Git은 어떤 명령을 입력하려고 했을지 추측해서 보여주긴 하지만 직접 실행하진 않는다. 그러나 <code>help.autocorrect</code> 를 1로 설정하면 명령어를 잘못 입력해도 Git이 자동으로 해당 명령어를 찾아서 실행해준다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git chekcout master WARNING: You called a Git command named 'chekcout', which does not exist. Continuing under the assumption that you meant 'checkout' in 0.1 seconds automatically...</code></pre> </div> </div> <div class="paragraph"> <p>여기서 재밌는 것은 “0.1 seconds” 이다. 사실 <code>help.autocorrect</code> 설정에 사용하는 값은 1/10 초 단위의 숫자를 나타낸다. 만약 50이라는 값으로 설정한다면 자동으로 고친 명령을 실행할 때 Git은 5초간 명령을 실행하지 않고 기다려줄 수 있다.</p> </div> </div> </div> <div class="sect3"> <h3 id="_컬러_터미널">컬러 터미널</h3> <div class="paragraph"> <p></p> </div> <div class="paragraph"> <p>사람이 쉽게 인식할 수 있도록 터미널에 결과를 컬러로 출력할 수 있다. 터미널 컬러와 관련된 옵션은 매우 다양하기 때문에 꼼꼼하게 설정할 수 있다.</p> </div> <div class="sect4"> <h4 id="_color_ui"><code>color.ui</code></h4> <div class="paragraph"> <p>Git은 기본적으로 터미널에 출력하는 결과물을 알아서 색칠하지만, 이 색칠하는 기능을 끄고 싶다면 한 가지 설정만 해 두면 된다. 아래와 같은 명령을 실행하면 더는 색칠된 결과물을 내지 않는다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global color.ui false</code></pre> </div> </div> <div class="paragraph"> <p>컬러 설정의 기본 값은 <code>auto</code> 로 터미널에 출력할 때는 색칠하지만, 결과가 리다이렉션되거나 파일로 출력되면 색칠하지 않는다.</p> </div> <div class="paragraph"> <p><code>always</code> 로 설정하면 터미널이든 다른 출력이든 상관없이 색칠하여 내보낸다. 대개 이 값을 설정해서 사용하지 않는다. <code>--color</code> 옵션을 사용하면 강제로 결과를 색칠해서 내도록 할 수 있기 때문이다. 대부분은 기본 값이 낫다.</p> </div> </div> <div class="sect4"> <h4 id="_color"><code>color.*</code></h4> <div class="paragraph"> <p>Git은 좀 더 꼼꼼하게 컬러를 설정하는 방법을 제공한다. 아래와 같은 설정들이 있다. 모두 <code>true</code>, <code>false</code>, <code>always</code> 중 하나를 고를 수 있다.</p> </div> <div class="literalblock"> <div class="content"> <pre>color.branch color.diff color.interactive color.status</pre> </div> </div> <div class="paragraph"> <p>또한, 각 옵션의 컬러를 직접 지정할 수도 있다. 아래처럼 설정하면 diff 명령에서 meta 정보의 포그라운드는 blue, 백그라운드는 black, 테스트는 bold로 바뀐다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global color.diff.meta "blue black bold"</code></pre> </div> </div> <div class="paragraph"> <p>컬러는 <code>normal</code>, <code>black</code>, <code>red</code>, <code>green</code>, <code>yellow</code>, <code>blue</code>, <code>magenta</code>, <code>cyan</code>, <code>white</code> 중에서 고를 수 있다. 텍스트 속성은 <code>bold</code>, <code>dim</code>, <code>ul</code> (underline), <code>blink</code>, <code>reverse</code> 중에서 고를 수 있다.</p> </div> </div> </div> <div class="sect3"> <h3 id="_external_merge_tools">다른 Merge, Diff 도구 사용하기</h3> <div class="paragraph"> <p></p> </div> <div class="paragraph"> <p>Git에 들어 있는 diff 도구 말고 다른 도구로 바꿀 수 있다. 화려한 GUI 도구로 바꿔서 좀 더 편리하게 충돌을 해결할 수 있다. 여기서는 Perforce의 Merge 도구인 P4Merge로 설정하는 것을 보여준다. P4Merge는 무료인데다 꽤 괜찮다.</p> </div> <div class="paragraph"> <p>P4Merge는 중요 플랫폼을 모두 지원하기 때문에 웬만한 환경이면 사용할 수 있다. 여기서는 Mac과 Linux 시스템에 설치하는 것을 보여준다. Windows에서 사용하려면 <code>/usr/local/bin</code> 경로만 Windows 경로로 바꿔준다.</p> </div> <div class="paragraph"> <p>먼저 <a href="https://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools" class="bare">https://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools</a> 에서 P4Merge를 내려받는다. 그 후에 P4Merge 에 쓸 Wrapper 스크립트를 만든다. 필자는 Mac 사용자라서 Mac 경로를 사용한다. 어떤 시스템이든 <code>p4merge</code> 가 설치된 경로를 사용하면 된다. 예제에서는 <code>extMerge</code> 라는 Merge 용 Wrapper 스크립트를 만들고 이 스크립트로 넘어오는 모든 아규먼트를 p4merge 프로그램으로 넘긴다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ cat /usr/local/bin/extMerge #!/bin/sh /Applications/p4merge.app/Contents/MacOS/p4merge $*</code></pre> </div> </div> <div class="paragraph"> <p>그리고 diff용 Wrapper도 만든다. 이 스크립트로 넘어오는 아규먼트는 총 7개지만 그 중 2개만 Merge Wrapper로 넘긴다. Git이 diff 프로그램에 넘겨주는 아규먼트는 아래와 같다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code>path old-file old-hex old-mode new-file new-hex new-mode</code></pre> </div> </div> <div class="paragraph"> <p>이 중에서 <code>old-file</code> 과 <code>new-file</code> 만 사용하는 wrapper 스크립트를 만든다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ cat /usr/local/bin/extDiff #!/bin/sh [ $# -eq 7 ] &amp;&amp; /usr/local/bin/extMerge "$2" "$5"</code></pre> </div> </div> <div class="paragraph"> <p>이 두 스크립트에 실행 권한을 부여한다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ sudo chmod +x /usr/local/bin/extMerge $ sudo chmod +x /usr/local/bin/extDiff</code></pre> </div> </div> <div class="paragraph"> <p>Git config 파일에 이 스크립트를 모두 추가한다. 설정해야 하는 옵션이 좀 많다. <code>merge.tool</code> 로 무슨 Merge 도구를 사용할지, <code>mergetool.*.cmd</code> 로 실제로 어떻게 명령어를 실행할지, <code>mergetool.trustExitCode</code> 로 Merge 도구가 반환하는 exit 코드가 Merge의 성공 여부를 나타내는지, <code>diff.external</code> 은 diff 할 때 실행할 명령어가 무엇인지를 설정할 때 사용한다. 모두 <code>git config</code> 명령으로 설정한다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global merge.tool extMerge $ git config --global mergetool.extMerge.cmd \ 'extMerge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"' $ git config --global mergetool.extMerge.trustExitCode false $ git config --global diff.external extDiff</code></pre> </div> </div> <div class="paragraph"> <p><code>~/.gitconfig/</code> 파일을 직접 편집해도 된다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-ini" data-lang="ini">[merge] tool = extMerge [mergetool "extMerge"] cmd = extMerge "$BASE" "$LOCAL" "$REMOTE" "$MERGED" trustExitCode = false [diff] external = extDiff</code></pre> </div> </div> <div class="paragraph"> <p>설정을 완료하고 나서 아래와 같이 diff 명령어를 실행한다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git diff 32d1776b1^ 32d1776b1</code></pre> </div> </div> <div class="paragraph"> <p>diff 결과가 터미널에 출력되는 대신 P4Merge가 실행되어 아래처럼 Diff 결과를 보여준다.</p> </div> <div class="imageblock"> <div class="content"> <img src="/book/ko/v2/images/p4merge.png" alt="P4Merge."> </div> <div class="title">그림 143. P4Merge.</div> </div> <div class="paragraph"> <p>브랜치를 Merge 할 때 충돌이 나면 <code>git mergetool</code> 명령을 실행한다. 이 명령을 실행하면 GUI 도구로 충돌을 해결할 수 있도록 P4Merge를 실행해준다.</p> </div> <div class="paragraph"> <p>Wrapper를 만들어 설정해두면 다른 Diff, Merge 도구로 바꾸기도 쉽다. 예를 들어, KDiff3를 사용하도록 <code>extDiff</code> 와 <code>extMerge</code> 스크립트를 수정한다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ cat /usr/local/bin/extMerge #!/bin/sh /Applications/kdiff3.app/Contents/MacOS/kdiff3 $*</code></pre> </div> </div> <div class="paragraph"> <p>이제부터 Git은 Diff 결과를 보여주거나 충돌을 해결할 때 KDiff3 도구를 사용한다.</p> </div> <div class="paragraph"> <p>어떤 Merge 도구는 Git에 미리 설정이 들어 있다. 그래서 추가로 스크립트를 작성하거나 하는 설정 없이 사용할 수 있는 것도 있다. 아래와 같은 명령으로 확인해볼 수 있다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git mergetool --tool-help 'git mergetool --tool=&lt;tool&gt;' may be set to one of the following: emerge gvimdiff gvimdiff2 opendiff p4merge vimdiff vimdiff2 The following tools are valid, but not currently available: araxis bc3 codecompare deltawalker diffmerge diffuse ecmerge kdiff3 meld tkdiff tortoisemerge xxdiff Some of the tools listed above only work in a windowed environment. If run in a terminal-only session, they will fail.</code></pre> </div> </div> <div class="paragraph"> <p>Diff 도구로는 다른 것을 사용하지만, Merge 도구로는 KDiff3를 사용하고 싶은 경우에는 kdiff3 명령을 실행경로로 넣고 아래와 같이 설정하기만 하면 된다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global merge.tool kdiff3</code></pre> </div> </div> <div class="paragraph"> <p><code>extMerge</code> 와 <code>extDiff</code> 파일을 만들지 않고 이렇게 Merge 도구만 <code>kdiff3</code> 로 설정하고 Diff 도구는 Git에 원래 들어 있는 것을 사용할 수 있다.</p> </div> </div> <div class="sect3"> <h3 id="_formatting_and_whitespace">Formatting and Whitespace</h3> <div class="paragraph"> <p></p> </div> <div class="paragraph"> <p>협업할 때 겪는 소스 포맷(Formatting)과 공백 문제는 미묘하고 난해하다. 동료 사이에 사용하는 플랫폼이 다를 때는 특히 더 심하다. 다른 사람이 보내온 Patch는 공백 문자 패턴이 미묘하게 다를 확률이 높다. 편집기가 몰래 공백문자를 추가해 버릴 수도 있고 크로스-플랫폼 프로젝트에서 Windows 개발자가 라인 끝에 CR(Carriage-Return) 문자를 추가해 버렸을 수도 있다. Git에는 이 이슈를 돕는 몇 가지 설정이 있다.</p> </div> <div class="sect4"> <h4 id="_core_autocrlf"><code>core.autocrlf</code></h4> <div class="paragraph"> <p></p> </div> <div class="paragraph"> <p>Windows에서 개발하는 동료와 함께 일하면 라인 바꿈(New Line) 문자에 문제가 생긴다. Windows는 라인 바꿈 문자로 CR(Carriage-Return)과 LF(Line Feed) 문자를 둘 다 사용하지만, Mac과 Linux는 LF 문자만 사용한다. 아무것도 아닌 것 같지만, 크로스 플랫폼 프로젝트에서는 꽤 성가신 문제다. Windows에서 사용하는 많은 편집기가 자동으로 LF 스타일의 라인 바꿈 스타일을 CRLF로 바꾸거나 Enter 키를 입력하면 CRLF 스타일을 사용하기 때문이다.</p> </div> <div class="paragraph"> <p>Git은 커밋할 때 자동으로 CRLF를 LF로 변환해주고 반대로 Checkout 할 때 LF를 CRLF로 변환해 주는 기능이 있다. <code>core.autocrlf</code> 설정으로 이 기능을 켤 수 있다. Windows에서 이 값을 true로 설정하면 Checkout 할 때 LF 문자가 CRLF 문자로 변환된다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global core.autocrlf true</code></pre> </div> </div> <div class="paragraph"> <p>라인 바꿈 문자로 LF를 사용하는 Linux와 Mac에서는 Checkout 할 때 Git이 LF를 CRLF로 변환할 필요가 없다. 게다가 우연히 CRLF가 들어간 파일이 저장소에 들어 있어도 Git이 알아서 고쳐주면 좋을 것이다. <code>core.autocrlf</code> 값을 input으로 설정하면 커밋할 때만 CRLF를 LF로 변환한다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global core.autocrlf input</code></pre> </div> </div> <div class="paragraph"> <p>이 설정을 이용하면 Windows에서는 CRLF를 사용하고 Mac, Linux, 저장소에서는 LF를 사용할 수 있다.</p> </div> <div class="paragraph"> <p>Windows 플랫폼에서만 개발하면 이 기능이 필요 없다. 이 옵션을 <code>false</code> 라고 설정하면 이 기능이 꺼지고 CR 문자도 저장소에도 저장된다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global core.autocrlf false</code></pre> </div> </div> </div> <div class="sect4"> <h4 id="_core_whitespace"><code>core.whitespace</code></h4> <div class="paragraph"> <p>Git에는 공백 문자를 다루는 방법으로 네 가지가 미리 정의돼 있다. 두 가지는 기본적으로 켜져 있지만 끌 수 있고 나머지 두 가지는 꺼져 있지만 켤 수 있다.</p> </div> <div class="paragraph"> <p>먼저 기본적으로 켜져 있는 것을 살펴보자. <code>blank-at-eol</code> 는 각 라인 끝에 공백이 있는지 찾고, <code>blank-at-eof</code> 는 파일 끝에 추가한 빈 라인이 있는지 찾고, <code>space-before-tab</code> 은 모든 라인에서 처음에 tab보다 공백이 먼저 나오는지 찾는다.</p> </div> <div class="paragraph"> <p>기본적으로 꺼져 있는 나머지 세 개는 <code>indent-with-non-tab</code> 과 <code>tab-in-indent</code> 과 <code>cr-at-eol</code> 이다. <code>intent-with-non-tab</code> 은 tab이 아니라 공백으로(<code>tabwidth</code> 설정에 영향받음) 시작하는 라인이 있는지 찾고 <code>cr-at-eol</code> 은 라인 끝에 CR 문자가 있어도 괜찮다고 Git에 알리는 것이다.</p> </div> <div class="paragraph"> <p><code>core.whitespace</code> 옵션으로 이 네 가지 방법을 켜고 끌 수 있다. 설정에서 해당 옵션을 빼버리거나 이름이 <code>-</code> 로 시작하면 기능이 꺼진다. 예를 들어, 다른 건 다 켜고 <code>space-before-tab</code> 옵션만 끄려면 아래와 같이 설정한다. <code>trailing-space</code> 옵션은 <code>blank-at-eol</code> 옵션과 <code>blank-at-eof</code> 옵션을 의미한다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global core.whitespace \ trailing-space,-space-before-tab,indent-with-non-tab,tab-in-indent,cr-at-eol</code></pre> </div> </div> <div class="paragraph"> <p>또는 각 부분에 대해서 설정을 할 수도 있다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global core.whitespace \ -space-before-tab,indent-with-non-tab,tab-in-indent,cr-at-eol</code></pre> </div> </div> <div class="paragraph"> <p><code>git diff</code> 명령을 실행하면 Git은 이 설정에 따라 검사해서 컬러로 표시해준다. 그래서 좀 더 쉽게 검토해서 커밋할 수 있다. <code>git apply</code> 명령으로 Patch를 적용할 때도 이 설정을 이용할 수 있다. 아래처럼 명령어를 실행하면 해당 Patch가 공백문자 정책에 들어맞는지 확인할 수 있다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git apply --whitespace=warn &lt;patch&gt;</code></pre> </div> </div> <div class="paragraph"> <p>아니면 Git이 자동으로 고치도록 할 수 있다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git apply --whitespace=fix &lt;patch&gt;</code></pre> </div> </div> <div class="paragraph"> <p>이 옵션은 <code>git rebase</code> 명령에서도 사용할 수 있다. 공백 문제가 있는 커밋을 Upstream에 Push 하기 전에 <code>--whitespace=fix</code> 옵션을 주고 Rebase 하면 Git은 다시 Patch를 적용하면서 공백을 설정한 대로 고친다.</p> </div> </div> </div> <div class="sect3"> <h3 id="_서버_설정">서버 설정</h3> <div class="paragraph"> <p>서버 설정은 많지 않지만, 꼭 짚고 넘어가야 하는 것이 몇 개 있다.</p> </div> <div class="sect4"> <h4 id="_receive_fsckobjects"><code>receive.fsckObjects</code></h4> <div class="paragraph"> <p>Git은 Push 할 때마다 각 개체가 SHA-1 체크섬에 맞는지 잘못된 개체가 가리키고 있는지 검사하게 할 수 있다. 기본적으로 이 기능이 동작하지 않게 설정이 되어 있는데 개체를 점검하데 상당히 시간이 걸리기 때문에 Push 하는 시간이 늘어난다. 얼마나 늘어나는지는 저장소 크기와 Push 하는 양에 달렸다. <code>receive.fsckOBjects</code> 값을 true로 설정하면 Git이 Push 할 때마다 검증한다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --system receive.fsckObjects true</code></pre> </div> </div> <div class="paragraph"> <p>이렇게 설정하면 Push 할 때마다 검증하기 때문에 클라이언트는 잘못된 데이터를 Push 하지 못한다.</p> </div> </div> <div class="sect4"> <h4 id="_receive_denynonfastforwards"><code>receive.denyNonFastForwards</code></h4> <div class="paragraph"> <p>이미 Push 한 커밋을 Rebase 해서 다시 Push 하지 못하게 할 수 있다. 브랜치를 Push 할 때 해당 리모트 브랜치가 가리키는 커밋이 Push 하려는 브랜치에 없을 때 Push 하지 못하게 할 수 있다. 보통은 이런 정책이 좋고 <code>git push</code> 명령에 <code>-f</code> 옵션을 주면 강제로 Push 할 수 있다.</p> </div> <div class="paragraph"> <p><code>receive.denyNonFastForwards</code> 옵션을 켜면 Fast-forward로 Push 할 수 없는 브랜치는 아예 Push 하지 못한다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --system receive.denyNonFastForwards true</code></pre> </div> </div> <div class="paragraph"> <p>사용자마다 다른 정책을 적용하고 싶으면 서버 훅을 사용해야 한다. 서버의 receive 훅으로 할 수 있고 이 훅도 이 장에서 설명한다.</p> </div> </div> <div class="sect4"> <h4 id="_receive_denydeletes"><code>receive.denyDeletes</code></h4> <div class="paragraph"> <p><code>receive.denyNonFastForwards</code> 와 비슷한 정책으로 <code>receive.denyDeletes</code> 라는 것이 있다. 이 설정을 켜면 브랜치를 삭제하는 Push가 거절된다.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --system receive.denyDeletes true</code></pre> </div> </div> <div class="paragraph"> <p>이제 브랜치나 Tag를 삭제하는 Push는 거절된다. 아무도 삭제할 수 없다. 리모트 브랜치를 삭제하려면 직접 손으로 server의 ref 파일을 삭제해야 한다. 그리고 사용자마다 다른 정책을 적용시키는 ACL을 만드는 방법도 있다. 이 방법은 <a href="/book/ko/v2/ch00/_an_example_git_enforced_policy">정책 구현하기</a> 에서 다룬다.</p> </div> </div> </div> <div id="nav"><a href="/book/ko/v2/Git-도구-요약">prev</a> | <a href="/book/ko/v2/Git맞춤-Git-Attributes">next</a></div> </div> </div> </div> </div> <footer> <div class="site-source"> <a href="/site">About this site</a><br> Patches, suggestions, and comments are welcome. </div> <div class="sfc-member"> Git is a member of <a href="/sfc">Software Freedom Conservancy</a> </div> </footer> <a href="#top" class="no-js scrollToTop" id="scrollToTop" data-label="Scroll to top"> <img src="/images/icons/chevron-up@2x.png" width="20" height="20" alt="scroll-to-top"/> </a> <script src="/js/jquery-1.7.1.min.js"></script> <script src="/js/jquery-ui-1.8.18.custom.min.js"></script> <script src="/js/jquery.defaultvalue.js"></script> <script src="/js/session.min.js"></script> <script src="/js/application.min.js"></script> </div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10