{"id":2135,"date":"2014-08-06T12:58:33","date_gmt":"2014-08-06T10:58:33","guid":{"rendered":"http:\/\/miroslaw.borodziuk.eu\/?p=2135"},"modified":"2018-06-16T09:14:03","modified_gmt":"2018-06-16T07:14:03","slug":"git-podstawy","status":"publish","type":"post","link":"http:\/\/miro.borodziuk.eu\/index.php\/2014\/08\/06\/git-podstawy\/","title":{"rendered":"Git &#8211; podstawy"},"content":{"rendered":"<p>Git to system kontroli wersji, kt\u00f3ry sta\u0142 si\u0119 w praktyce standardem na rynku.<\/p>\n<p><!--more--><\/p>\n<p><span style=\"color: #3366ff;\">Podstawowe poj\u0119cia<\/span><\/p>\n<ul>\n<li>SCM \u2014 to akronim od Source Code Management, czyli dos\u0142ownie kontrola kodu (w j\u0119zyku polskim funkcjonuje okre\u015blenie system kontroli wersji); jest to system kt\u00f3ry pozwala na archiwizowanie i \u015bledzenie zmian w kodzie, dzi\u0119ki czemu mo\u017cemy cofa\u0107 si\u0119 w historii lub podejrze\u0107, kto by\u0142 autorem konkretnej zmiany<\/li>\n<li>Repozytorium \u2014 \u2018kontener\u2019 na okre\u015blony zbi\u00f3r kodu, najcz\u0119\u015bciej jeden projekt; repozytorium pozwala grupowa\u0107 kod i zmiany, dzi\u0119ki czemu mo\u017cemy przegl\u0105da\u0107 wszystkie zmiany wykonane w ramach jednego repozytorium, przyznawa\u0107 uprawnienia do repozytori\u00f3w oraz pobiera\u0107 \/ kopiowa\u0107 je<\/li>\n<li>Commit (lub rewizja) \u2014 jest to proces \u2018wys\u0142ania\u2019 na repozytorium okre\u015blonych zmian w kodzie \u2014 je\u015bli pobierasz kod z repozytorium, nast\u0119pnie dokonujesz modyfikacji i wysy\u0142asz te zmiany z powrotem do repozytorium, proces ten nosi nazw\u0119 commitowania, a same zmiany wys\u0142ane razem nazywamy commitem lub rewizj\u0105<\/li>\n<li>pull \/ push \u2014 odpowiednio pobranie i wys\u0142anie zmian (jednego lub wielu commit\u00f3w) z\/do innego repozytorium<\/li>\n<li>diff \u2014 (ang. r\u00f3\u017cnica) \u2014 jest to r\u00f3\u017cnica pomi\u0119dzy r\u00f3\u017cnymi rewizjami \u2014 dzi\u0119ki temu mo\u017cemy zobaczy\u0107, kt\u00f3re fragmenty uleg\u0142y zmianie oraz w jaki spos\u00f3b; pozwala to tak\u017ce zoptymalizowa\u0107 transfer danych pomi\u0119dzy repozytoriami<\/li>\n<li>fork \u2014 kopia repozytorium; szczeg\u00f3lnie popularne w przypadku projekt\u00f3w open-source, dzi\u0119ki czemu mo\u017cemy skopiowa\u0107 ca\u0142y projekt i rozwija\u0107 go niezale\u017cnie (np. dopasowuj\u0105c do naszych potrzeb)<\/li>\n<li>branch \u2014 odga\u0142\u0119zienie, wersja wewn\u0105trz repozytorium; branche pozwalaj\u0105 na prace wielu osobom r\u00f3wnocze\u015bnie, bez ci\u0105g\u0142ego wchodzenia sobie w drog\u0119 i nadpisywania zmian \u2014 ka\u017cdy mo\u017ce pracowa\u0107 na swoim branchu, dopiero po zako\u0144czeniu pracy \u0142\u0105cz\u0105c zmiany z innymi i rozwi\u0105zuj\u0105c problemy<\/li>\n<li>merge \u2014 po\u0142\u0105czenie wielu zmian z r\u00f3\u017cnych \u017ar\u00f3de\u0142, kt\u00f3re mo\u017ce skutkowa\u0107 niekompatybilnymi zmianami wymagaj\u0105cymi r\u0119cznych modyfikacji; merge pozwala \u0142\u0105czy\u0107 prace wykonywane w r\u00f3\u017cnych obszarach, kt\u00f3re mog\u0105 si\u0119 zaz\u0119bia\u0107, w jedn\u0105 ca\u0142o\u015b\u0107 w spos\u00f3b kontrolowany i \u015bwiadomy<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #3366ff;\">Przyk\u0142ady.<\/span><\/p>\n<p>Pierwszy commit:<\/p>\n<pre class=\"lang:sh decode:true\">git clone git@github.com:GIT_ACCOUNT_NAME\/REPO_NAME.git\r\ngit init\r\ngit add .\r\ngit commit -am \"First commit\"\r\ngit remote add origin git@github.com:GIT_ACCOUNT_NAME\/REPO_NAME.git\r\ngit push origin master<\/pre>\n<p>Drugi commit dla ga\u0142\u0119zi master:<\/p>\n<pre class=\"lang:sh decode:true \">git status\r\ngit commit -am \"File X has been changed\"\r\ngit push origin master<\/pre>\n<p>Drugi commit dla nowej ga\u0142\u0119zi o nazwie np. <em>production<\/em>:<\/p>\n<pre class=\"lang:sh decode:true \">git status\r\ngit commit -am \"File Y has been changed\"\r\ngit push origin production<\/pre>\n<p>Klonowanie na kliencie poraz pierwszy repozytorium:<\/p>\n<pre class=\"lang:sh decode:true \">git clone git@github.com:GIT_ACCOUNT_NAME\/REPO_NAME.git<\/pre>\n<p>Aktualizacja na kliencie po dokonaniu zmian w repozytorium.<\/p>\n<pre class=\"lang:sh decode:true \">git pull origin master<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Git to system kontroli wersji, kt\u00f3ry sta\u0142 si\u0119 w praktyce standardem na rynku.<\/p>\n","protected":false},"author":1,"featured_media":2136,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[55],"tags":[],"_links":{"self":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/2135"}],"collection":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/comments?post=2135"}],"version-history":[{"count":7,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/2135\/revisions"}],"predecessor-version":[{"id":2143,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/posts\/2135\/revisions\/2143"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/media\/2136"}],"wp:attachment":[{"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/media?parent=2135"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/categories?post=2135"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/miro.borodziuk.eu\/index.php\/wp-json\/wp\/v2\/tags?post=2135"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}