{"id":821,"date":"2011-02-16T00:17:58","date_gmt":"2011-02-15T23:17:58","guid":{"rendered":"http:\/\/netrix.org.pl\/?p=821"},"modified":"2011-02-16T00:33:09","modified_gmt":"2011-02-15T23:33:09","slug":"wlasne-repozytorium-gita-na-linuksie","status":"publish","type":"post","link":"https:\/\/netrix.org.pl\/index.php\/2011\/02\/16\/wlasne-repozytorium-gita-na-linuksie\/","title":{"rendered":"W\u0142asne repozytorium Gita na Linuksie"},"content":{"rendered":"<p>W tej notce postaram si\u0119 opisa\u0107 w jaki spos\u00f3b, krok po kroku, postawi\u0107 g\u0142\u00f3wne repozytorium Gita na w\u0142asnym serwerze z zainstalowanym systemem linux (na przyk\u0142adzie Slackware, z kt\u00f3rego korzystam, ale my\u015bl\u0119, \u017ce nie b\u0119dzie problem\u00f3w na innych dystrybucjach). Repozytorium nie b\u0119dzie wykorzystywa\u0107 interfejsu webowego i nie b\u0119dzie uwzgl\u0119dnia\u0107 podzia\u0142u na konta, ale b\u0119dzie wystarczaj\u0105c\u0105 alternatyw\u0105 dla publicznego repozytorium w serwisie GitHub. Jednak zaczynaj\u0105c od pocz\u0105tku wypada\u0142oby powiedzie\u0107 kilka s\u0142\u00f3w o tym czym jest Git.<\/p>\n<p>Git jest jednym z kilku system\u00f3w kontroli wersji (SVN, Mercurial), czyli narz\u0119dzi s\u0142u\u017c\u0105cych do \u015bledzenia zmian w kodzie \u017ar\u00f3d\u0142owym. Jego g\u0142\u00f3wnym zadaniem jest \u0142\u0105czenie i modyfikacja zmian, a w razie b\u0142\u0119du, umo\u017cliwienie przywr\u00f3cenia poprzedniej, dzia\u0142aj\u0105cej wersji. Jedn\u0105 z bardzo wa\u017cnych cech Gita jest to, \u017ce wszystkie zmiany s\u0105 przechowywane lokalnie, dzi\u0119ki czemu nie wymaga on do dzia\u0142ania po\u0142\u0105czenia z g\u0142\u00f3wnym repozytorium. W por\u00f3wnaniu do Subversion, z kt\u00f3rego do tej pory korzysta\u0142em, jest r\u00f3wnie\u017c szybszy i nie wyst\u0119puj\u0105 w nim problemy z \u0142\u0105czeniem r\u00f3wnoleg\u0142ych wersji (branchy).<\/p>\n<p>Wracaj\u0105c jednak do tematu, na pocz\u0105tek wypada\u0142oby si\u0119 upewni\u0107 czy na komputerze, na kt\u00f3rym chcemy zainstalowa\u0107 Gita jest jedna z jego nowszych wersji. Ma to zwi\u0105zek z przeniesieniem wewn\u0119trznych plik\u00f3w wykonywalnych z katalogu <em>\/usr\/bin\/<\/em> do <em>\/usr\/libexec\/git-core\/<\/em>. <\/p>\n<h4>Instalacja Gita<\/h4>\n<p>Tak wi\u0119c na pocz\u0105tek pobieramy paczk\u0119 z git-core z <strong><a href=\"http:\/\/git-scm.com\/download\">tej<\/a><\/strong> strony, za pomoc\u0105 polecenia:<\/p>\n<pre lang=\"bash\">wget http:\/\/kernel.org\/pub\/software\/scm\/git\/git-1.7.4.1.tar.bz2<\/pre>\n<p>i j\u0105 rozpakowujemy:<\/p>\n<pre lang=\"bash\">tar \u2013xvf git-1.7.4.1.tar.bz2<\/pre>\n<p>nast\u0119pnie przechodzimy do tego katalogu i (po przeczytaniu README oraz INSTALL), wykonujemy nast\u0119puj\u0105ce polecenia:<\/p>\n<pre lang=\"bash\">.\/configure && make && make prefix=\/usr install install-doc install-html install-info<\/pre>\n<p>Tutaj mo\u017cna napotka\u0107 problem przy instalowaniu dokumentacji, jak to mia\u0142o miejsce u mnie. Rozwi\u0105zanie tego problemu znajduje si\u0119 na <strong><a href=\"http:\/\/stackoverflow.com\/questions\/897477\/installing-git-on-os-x\">tej<\/a><\/strong> stronie.<\/p>\n<p>W tym momencie Git powinien by\u0107 ju\u017c zainstalowany, w przypadku gdy mieli\u015bmy na dysku star\u0105 wersj\u0119, kt\u00f3ra pliki wykonywalne przechowuje w katalogu <em>\/usr\/bin\/<\/em>, nale\u017cy je r\u0119cznie skasowa\u0107, \u017ceby nie sprawia\u0142y problemu. Je\u015bli jest to mo\u017cliwe, mo\u017cna je rozpozna\u0107 po datach modyfikacji, po czym na koniec powinny zosta\u0107 tam nast\u0119puj\u0105ce pliki:<\/p>\n<pre lang=\"text\">\r\ngit\r\ngit-cvsserver\r\ngit-receive-pack\r\ngit-shell\r\ngit-upload-archive\r\ngit-upload-pack\r\ngitk\r\n<\/pre>\n<h4>Konto shellowe Git<\/h4>\n<\/p>\n<p>Kolejnym krokiem jest utworzenie odpowiedniego konta shellowego, dzi\u0119ki kt\u00f3remu b\u0119dzie mo\u017cna po\u0142\u0105czy\u0107 si\u0119 z repozytorium za pomoc\u0105 protoko\u0142u ssh. Konto nale\u017cy utworzy\u0107 z <em>uid<\/em> i <em>gid<\/em> r\u00f3wnymi <em>9418<\/em> oraz <em>git-shell<\/em> jako programem startowym:<\/p>\n<pre lang=\"bash\">\r\ngroupadd git \u2013g 9418\r\nuseradd git \u2013u 9418 \u2013g git \u2013c git \u2013d \/home\/git \u2013s \/usr\/libexec\/git-core\/git-shell\r\npasswd \u2013d git\r\n<\/pre>\n<p>Istotna jest ostatnia komenda, poniewa\u017c bez niej nie uda si\u0119 nam po\u0142\u0105czy\u0107 z repozytorium. Nast\u0119pnie tworzymy repozytorium i nadajemy prawa:<\/p>\n<pre lang=\"bash\">\r\nchown git:git \/home\/git\/\r\nchmod 700 \/home\/git\/\r\nmkdir \/home\/git\/base\/\r\nchown git:git \/home\/git\/base\/\r\nchmod 775 \/home\/git\/base\/\r\n<\/pre>\n<p>Kolejnym krokiem jest utworzenie w\u0142a\u015bciwego repozytorium, robi si\u0119 to za pomoc\u0105 polece\u0144:<\/p>\n<pre lang=\"bash\">\r\nmkdir \/home\/git\/base\/repo.git\r\ncd \/home\/git\/base\/repo.git\r\ngit init \u2013-bare -\u2013shared\r\nsudo chmod -R g+ws *\r\nsudo chgrp -R git *\r\n<\/pre>\n<p>Repozytorium jest ju\u017c gotowe, niestety jeszcze nie mo\u017cna si\u0119 z nim po\u0142\u0105czy\u0107, poniewa\u017c konto <em>git<\/em> nie posiada has\u0142a. W celu umo\u017cliwienia \u0142\u0105czenia si\u0119 do repozytorium nale\u017cy skorzysta\u0107 mechanizmu autoryzacji sesji <em>ssh<\/em> za pomoc\u0105 klucza prywatnego.<\/p>\n<h4>Autoryzacja za pomoc\u0105 klucza prywatnego<\/h4>\n<p>W tym celu nale\u017cy na ka\u017cdej maszynie, z kt\u00f3rej b\u0119dziemy si\u0119 \u0142\u0105czy\u0107, utworzy\u0107 dwa klucze rsa, jeden publiczny drugi prywatny. Nie b\u0119d\u0119 tego opisywa\u0142 w tej notce, poniewa\u017c jest to fajnie wyja\u015bnione na stronie GitHuba, w wersji dla systemu <a href=\"http:\/\/help.github.com\/msysgit-key-setup\/\"><strong>windows<\/strong><\/a><strong>&#160;<\/strong>i<strong> <\/strong><a href=\"http:\/\/help.github.com\/linux-key-setup\/\"><strong>linux<\/strong><\/a>. Opisz\u0119 natomiast w jaki spos\u00f3b doda\u0107 te klucze do konta git na serwerze, umo\u017cliwiaj\u0105c tym autoryzacj\u0119.<\/p>\n<p>Na pocz\u0105tek nale\u017cy utworzy\u0107 w katalogu <em>\/home\/git\/<\/em> katalog <em>.ssh<\/em>, w nim plik <em>authorized_keys<\/em> i nada\u0107 im odpowiednie prawa:<\/p>\n<pre lang=\"bash\">\r\nmkdir \/home\/git\/.ssh\r\nchmod 700 \/home\/git\/.ssh\/\r\ntouch \/home\/git\/.ssh\/authorized_keys\r\nchmod 600 \/home\/git\/.ssh\/authorized_keys\r\ncat id_rsa.pub >> \/home\/git\/.ssh\/authorized_keys\r\nchown \u2013R git:git \/home\/git\/.ssh\/\r\n<\/pre>\n<p>Gdzie <em>id_rsa.pub<\/em> to klucz publiczny skopiowany z komputera klienckiego.<\/p>\n<p>I to by by\u0142o na tyle, w tym momencie mo\u017cna ju\u017c wysy\u0142a\u0107 dane do repozytorium, kt\u00f3rego adres jest nast\u0119puj\u0105cy:<\/p>\n<pre lang=\"text\">git@adres_serwera:base\/repo.git<\/pre>\n<p>\u0179r\u00f3d\u0142a: <br \/>\n[1] <a title=\"http:\/\/forums.freebsd.org\/showthread.php?t=10810\" href=\"http:\/\/forums.freebsd.org\/showthread.php?t=10810\">http:\/\/forums.freebsd.org\/showthread.php?t=10810<\/a><br \/>\n[2] <a title=\"http:\/\/stackoverflow.com\/questions\/897477\/installing-git-on-os-x\" href=\"http:\/\/stackoverflow.com\/questions\/897477\/installing-git-on-os-x\">http:\/\/stackoverflow.com\/questions\/897477\/installing-git-on-os-x<\/a><br \/>\n[3] <a title=\"https:\/\/wincent.com\/wiki\/Updating_to_Git_1.6.0.1\" href=\"https:\/\/wincent.com\/wiki\/Updating_to_Git_1.6.0.1\">https:\/\/wincent.com\/wiki\/Updating_to_Git_1.6.0.1<\/a><br \/>\n[4] <a title=\"http:\/\/mapopa.blogspot.com\/2009\/10\/git-insufficient-permission-for-adding.html\" href=\"http:\/\/mapopa.blogspot.com\/2009\/10\/git-insufficient-permission-for-adding.html\">http:\/\/mapopa.blogspot.com\/2009\/10\/git-insufficient-permission-for-adding.html<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>W tej notce postaram si\u0119 opisa\u0107 w jaki spos\u00f3b, krok po kroku, postawi\u0107 g\u0142\u00f3wne repozytorium Gita na w\u0142asnym serwerze z zainstalowanym systemem linux (na przyk\u0142adzie Slackware, z kt\u00f3rego korzystam, ale my\u015bl\u0119, \u017ce nie b\u0119dzie problem\u00f3w na innych dystrybucjach). Repozytorium nie b\u0119dzie wykorzystywa\u0107 interfejsu webowego i nie b\u0119dzie uwzgl\u0119dnia\u0107 podzia\u0142u na konta, ale b\u0119dzie wystarczaj\u0105c\u0105 alternatyw\u0105 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21],"tags":[143,140,139,144,141,138,142],"_links":{"self":[{"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts\/821"}],"collection":[{"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/comments?post=821"}],"version-history":[{"count":15,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts\/821\/revisions"}],"predecessor-version":[{"id":836,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/posts\/821\/revisions\/836"}],"wp:attachment":[{"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/media?parent=821"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/categories?post=821"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/netrix.org.pl\/index.php\/wp-json\/wp\/v2\/tags?post=821"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}