Git/Przypadki

Z Wikibooks, biblioteki wolnych podręczników.

< Git

Spis treści

[edytuj] Przypadki użycia

edytuj

[edytuj] Wrzucanie do git aktualnego projektu

Załóżmy, że przechowujesz już swój projekt w katalogu projekt1, więc przechodzimy do tego katalogu

cd projekt1

Chcemy teraz aby git śledził pliki z projektu i pozwalał nam zarządzać wersjami plików, przeglądać historię itp. Musimy więc utworzyć tak zwane repozytorium wewnątrz naszego projekt1.

git init

Utworzony zostanie katalog projekt/.git w którym git będzie przechowywał wszystkie zmiany, które każemy mu pamiętać.

Następnie wrzucamy wszystkie pliki do indeksu (coś jak poczekalnia dla plików)

git add .

Na koniec przenosimy pliki z poczekalni od repozytorium

git commit -m 'pierwszy zapis do repo'

[edytuj] Wrzucanie pojedynczego nowego pliku

Załóżmy że stworzyliśmy nowy plik tekst.txt i chcemy go wrzucić do repozytorium. Tutaj też najpierw trzeba go wrzucić do poczekalni

git add tekst.txt

Dopiero potem wysyłamy plik do repozytorium.

git commit -m 'pierwszy plik'

[edytuj] Wrzucanie zmienionego pojedynczego pliku

Nasz plik tekst.txt już jest w repozytorium, ale zrobiliśmy zmiany, które chcemy zapisać w repozytorium. W tym przypadku możemy pominąć poczekalnię

git commit tekst.txt -m 'drobna zmiana'

[edytuj] Wrzucanie tylko zmienionych plików bez plików nie śledzonych

Załóżmy, że zmieniliśmy wiele plików, ale w naszym katalogu projekt1 są pliki, których nie chcemy w repozytorium jeszcze. Komenda git add . tu nam nie pomoże. Ale jest inna, która doda tylko pliki już śledzone przez git.

git add -a

[edytuj] Wrzucanie dwóch z wielu zmienionych plików

Znowu zmieniliśmy tekst.txt, ale także tekst2.txt oraz tekst3.txt. Chcemy jednak wysłać do zmiany dotyczące tekst.txt oraz tekst2.txt. git commit tekst.txt tekst2.txt

[edytuj] Niejasności związane z git add

Uruchamiamy git add tekst.txt i cały plik tekst.txt jest wrzucany do indeksu. Razem z zawartością. Jeśli teraz wprowadzimy jakieś poprawki do tekst.txt i nie zrobimy znowu git add tekst.txt, to git commit tekst.txt wyśle do repozytorium starszą wersję znajdującą się w indeksie.

Dlatego git add używamy tylko w trzech wariantach:

git add .
git add nowy_plik
git add nowy_plik nowy_plik2 itd.

[edytuj] Szybki start (do uprządkowania)

Obsługa git w edytorze vim

Uwaga! git nie dodaje pustych katalogów do repozytorium. To wynika z koncepcji, że git śledzi zawartość plików a nie pliki.

mkdir git_repo   # tworzymy katalog w którym będzie nasze repozytorium plików, możemy nazwać jak chcemy
cd git_repo      # przechodzimy do tego katalogu
git init         # inicjalizujemy bazę repozytorium (katalog .git)

Teraz wgrywamy do tego katalogu pliki lub tworzymy nowe.

git add .        # dodajemy wszystkie pliki do śledzenia z aktualnego katalogu, kropka oznacza właśnie katalog aktualny
git status       # sprawdzamy status naszego repozytorium, to polecenie pokaże które pliki zmienione, a które nowe
git commit -a    # zatwierdzamy zmiany czyli wysyłamy pliki do bazy repozytorium

Samo polecenie "git commit" zapisze tylko pliki które zostały dodane poleceniem "git add". Dlatego dodajemy -a, żeby nie dodawać ręcznie każdego zmienionego pliku. Nowe pliki trzeba jednak dodać przez "git add".

git log          # sprawdzamy historię zatwierdzeń
git whatchanged -p # historia zmian razem z diff
git whatchanged --pretty=oneline # wyświetla tylko nazwy zmienionych plików

Jeśli chcemy możemy rozgałęziać nasz projekt tworząc gałęzie. Domyślnie nowy projekt jest w gałęzi master. Wszystkie gałęzie można wylistować poleceniem

git branch

Znak * wskazuje aktualną gałąź.

Jeśli chcemy graficznie zobaczyć nasze drzewo kodu, to trzeba użyć polecenia "gitk" (w gentoo "gitview")

[edytuj] Dalsze operacje (do uprządkowania)

Wycofanie nie zapisanych zmian (dwa polecenia)

git checkout file-to-revert
git reset HEAD <file>

Cofnięcie wszystkich lokalnych zmian

git checkout -f

[edytuj] Cofanie zmian (do uprządkowania)

Poniższe polecenia działają na plikach już śledzonych. Jeśli chcemy usunąć także pliki nie śledzone, trzeba to zrobić ręcznie. Można najpierw usunąć wszystkie pliki poleceniem

rm -Rf *

To nie usunie katalogów o nazwach zaczynających się na kropkę czyli repozytorium .git.

git reset HEAD^         # nie ruszaj plików roboczych - pozostaw zmiany
git reset --hard HEAD^  # zresetuj również pliki robocze
git reset --hard HEAD~5 # cofnij się o 5 zapisów
git reset --hard origin # wyczyść wszystkie zmiany i zacznij od nowa
git-checkout -- nazwa_pliku # Przywróć ostatnią wersję pliku z repozytorium dla aktualnej gałęzi
git-checkout revision nazwa_pliku # Przywróć plik w wersji revision

Uwaga!

git-checkout revision #utworzy nam oderwaną gałąź, co nie koniecznie jest oczekiwane


git reset --hard revision # uaktualni HEAD i aktualną gałąź do
punktu określonego przez revision, i uaktualni drzewo robocze
aby odzwierciedlało nowy index.

Jeśli git reset --hard HEAD^ nie zadziała to trzeba trzeba inaczej

git reflog

wyświetli nam się lista operacji i znajdujemy numer tej operacji do której chcemy wrócić.

git reset --hard HEAD@{1}

[1]

[edytuj] Inne

[edytuj] Unable to write new index file, czyli brak miejsca na dysku

[2]

[edytuj] Nie można ponowić czynności clone

http://git.or.cz/gitwiki/SoC2008Ideas#head-bcfe9e77ab9670575d242059ce3bedacd7f73126