Giter Site home page Giter Site logo

bi-git-semestralka's Introduction

Dokumentace k semestrální práci BI-GIT

Jméno: Tomáš Batěk E-mail: [email protected]

1. Spojení repozitářů

Postup:

  • ze vzoru jsem dostal fetchnuté repozitáře Alice, Boba a Charlieho
  • každý repozotář má jenom jednu větev (master), takže jsem pro každý master vytvořil vlastní větev (alice, bob, charlie)
  • přepnul jsem do větve alice a mergnul bobův master, to způsobilo konflikty v src/dfi.sh - nechal jsem obě funkcionality a commitnul
  • poté jsem mergnul charlieho, při tom žádné konflikty nezvnikly

Použité příkazy pro spojení repozitářů:

git branch alice alice/master
git branch bob bob/master
git branch charlie charlie/master
git checkout alice
git merge bob
git add src/dfi.sh
git commit
git merge charlie
  • pro odstranění merge commitů jsem udělal rebase interactive na commit před narušením linearity
  • musel jsem vyřešit konflikty u Makefile a src/dfi.sh
  • pro odstranění fixupů jsem udělal rebase interactive na ten stejný commit a squasnul jsem fixup! commity
  • nakonec jsem přejmenoval větev a pushnul ji

Použité příkazy pro odstranění merge a fixup! commitů:

git rebase -i 221e11b
git add Makefile
git rebase --continue
git add src/dfi.sh
git rebase --continue
git rebase -i 221e11b
git branch -m merged
git push origin merged

2. CRLF

Postup:

  • soubor .gitattributes jsem navrhl tak, aby v repozitáři normalizoval všechny soubory, které považuje za text
  • také jsem do .gitattributes přímo specifikoval, aby soubory .ics měly v repozotáři CRLF konce řádků
  • když jsem chtěl provést změnu v celé historii, použil jsem příkaz git filter-branch
  • soubor .gitattributes není verzovaný a nikde v historii není, takže jsem ho musel při každém kroku vytvořit, než jsem mohl normalizovat

Návrh obsahu souboru .gitattributes:

* text=auto
*.ics text=crlf

Použité příkazy pro normalizaci konců řádků:

git checkout -b normalised
git filter-branch --tree-filter 'echo "* text=auto" > .gitattributes && echo "*.ics text=crlf" >> .gitattributes && git add --renormalize . && rm -f .gitattributes'
git push origin normalised

3. Osobní data

Postup:

  • soubory events.ics a events.ics.peek byly přidány v commitu a177898 a od té doby nebyly upraveny
  • použil jsem tedy rebase a upravil tento commit tak, abych ze souborů odstranil zmíněná osobní data

Použité příkazy:

git checkout -b safe
git rebase -i a177898^
git add --all
git commit --amend
git rebase --continue
git push origin safe

4. Kompilovaný soubor

Postup:

  • opět jsem si našel commit c6926e1, kde byl přidán soubor a.out a všiml si, že od té doby již nebyl nikdy upravován
  • znovu jsem tedy použil rebase na tento commit, abych soubor smazal
  • do .gitignore jsem přidal a.out, aby už soubory s tímto názvem ignoroval, a složku bin/, aby git ignoroval zkompilované binárky příkazem make

Použité příkazy:

git checkout -b clean
git rebase -i c6926e1^
rm -f a.out
git add src/image_histogram/a.out
git commit --amend
git rebase --continue
git push origin clean

Návrh .gitignore:

a.out
bin/

5. Oprava autora

Postup:

  • použil jsem rebase na commit, kde byl uveden špatný autor a autora opravil
  • kdybych chtěl opravit autory u mnoha commitů, použil bych způsob ukázaný přímo na přednášce - použití skriptu na filter-branch

Použité příkazy:

git checkout -b fix-author
git rebase -i ebc7a20^
git commit --author "Charlie <[email protected]>" --amend
git rebase --continue
git push origin fix-author

Příkazy pro případ zpracování mnoha commitů se špatnými jmény a adresami:

git filter-branch --env-filter '
    if [ "$GIT_COMMITTER_NAME" = "charlie" ];
    then
            GIT_COMMITTER_NAME="Charlie";
            GIT_AUTHOR_NAME="Charlie";
            GIT_COMMITTER_EMAIL="[email protected]";
            GIT_AUTHOR_EMAIL="[email protected]";
	fi' HEAD

6. Oddělení vývojové větve

Postup:

  • chceme mít repozitář tak, aby větev master neobsahovala commity ical, a větev dev, která bude z masteru vycházet a tyto 3 commity bude obsahovat
  • nejdříve jsem si tedy vytvořil větev dev vycházející z fix-author
  • použil jsem rebase před první ical commit, abych mohl ical commity přesunout nahoru (těmto commitům jsem zachoval pořadí)
  • v tomto místě jsem nyní vytvořil větev master
  • protože ve větvi master tyto 3 commity nechceme, použil jsem reset na commit 4cdfac9, který byl před těmito ical commity

Použité příkazy:

git checkout -b dev
git rebase -i 8b3a4a2^
git checkout -b master
git reset --hard 4cdfac9
git push origin master
git push origin dev:dev

7. Ochrana větve master

Postup:

  • pokud chceme, aby git spustil hook skript před pushnutím, tak k tomu slouží hook pre-push
  • v tomto skriptu spustím oba testy a pokud jejich návratová hodnota není 0, skript vrátí 1, což zabrání pushnutí

Cesta k souboru v adresáři .git: hooks/pre-push

Návrh obsahu souboru:

(cd ../../src/image_histogram/test; sh test.sh)

if [ $? -ne 0 ]
then
	exit 1
fi

(cd ../../src/ical_peek/test; sh test.sh)
if [ $? -ne 0 ]
then
	exit 1
fi

exit 0

bi-git-semestralka's People

Contributors

tomas-bat avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.