Szablon:Git/Przypadki
Z Wikibooks, biblioteki wolnych podręczników.
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)
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}
[edytuj] Inne
[edytuj] Unable to write new index file, czyli brak miejsca na dysku
[edytuj] Nie można ponowić czynności clone
http://git.or.cz/gitwiki/SoC2008Ideas#head-bcfe9e77ab9670575d242059ce3bedacd7f73126