Използване на Git

Страницата е създадена на:23 декември 2019 и редактирана на:24 януари 2020

Съдържание

Основни действия Първоначално изтегляне на файлове Опресняване на локално копие с промените от отдалечено хранилище Отразяване на направени промени в локалното хранилище Качване на промените от локалното хранилище в отдалеченото Игнориране на файлове .gitignore .git/info/exclude Използване на Git през Qt Creator Синхронизиране с повече хранилища Разклоняване (Branching) Подмодули (submodules) Използване на локално Git хранилище Отменяне на някои операции, направени с Git Промени, отразени в локално копие

Git е система за контрол на версиите, чието начало е положено от Линус Торвалдс, авторът на ядрото на Linux. Тази система предлага по-голяма гъвкавост и се предпочита от много програмисти на свободен софтуер. За повече информация, посетете сайта: https://git-scm.com

Команден Git клиент за Windows се изтегля от:
https://git-scm.com/download/win.

След инсталирането му, в изскачащото меню, което се показва при щракване с десния бутон на мишката в прозореца на Windows Explorer ще видите командите: Git GUI Here и Git Bash Here. Щракването върху Git Bash Here отваря специален терминален прозорец, в който можете да подавате командите за Git, както и други команди за работа с файлове.

Съществуват и Git клиенти с графичен нтерфейс, като например: SourceTree (https://www.sourcetreeapp.com), с версии за Windows и Mac, но тук ще опишем работа с команден клиент.

В macOS командният Git клиент е част от Xcode, така че щом инсталирате Xcode ще имате и Git.

В Ubuntu, ако в терминал подадете команда git, ако същия не е инсталиран, ще видите съобщение:

The program 'git' is currently not installed. You can install it by typing:

sudo apt install git

така че, изпълнете последната команда и ще разполагате с git.

Основни действия

Първоначално изтегляне на файлове

За първоначално изтегляне на файлове от хранилище с цел създаване на локално копие се подава команда:

git clone адресНаХранилище имеНаДиректория

Адресът на хранилището трябва да вземете от описанието на съответния проект. Например, ако в Github.com отворите хранилището на някой проект, неговия адрес може да копирате в Clopbord с щракване върху бутона "Clone or download" – "Copy to clipboard":

В някои хранилища, например, в sourceforge.net адресът на хранилището може да е различен в зависимост от правото за достъп. За достъп само за четене, един адрес може да изглежда така:

https://git.code.sf.net/p/имеНаПроект/git

но за достъп за четене и запис, същото хранилище е с адрес:

ssh://потребител@git.code.sf.net/p/имеНаПроект/git

Командата git clone създава в текущата директория, нова директория с посоченото в командата имеНаДиректория и изтегля в тази директория файловете от хранилището. Ако в командата git clone не се напише имеНаДиректория, то се създава директория с име, съвпадащо с името на проекта.

В някои хранилища се използват хранилища подмодули (submodules, вижте https://git-scm.com/docs/gitsubmodules). Това са съществуващи отделно, като самостоятилни хранилища, модули. При наличие на такива, за сваляне в локалната директория и на кода от хранилищата подмодули, се подава команда:

git submodule update --init --recursive

Опресняване на локално копие с промените от отдалечено хранилище

Ако след време, когато в отдалеченото хранилище са настъпили промени, за ново изтегляне и отразяване на тези промени в локалното копие, трябва да се намирате в директорията с локалното хранилище и да подадете команда:

git pull

Ако междувременно вие сте правели някакви промени в съхраняваните локално файлове, свалянето на промените от отдалеченото хранилище с тази команда комбинира, ако е възможно, и вашите промени, и тези от отдалеченото хранилище. Командата git pull, всъщност извършва две неща, които бихте могли да извършите и с последователност от две други команди:

git fetch

git merge

Първата от тези команди само сваля промени от отдалеченото хранилище, а втората извършва сливане на тези промени с вашите файлове от локалното хранилище.

Отразяване на направени промени в локалното хранилище

Кои файлове са претърпели промени в локалното хранилище се показва с команда:

git status

За отразяване на направени промени в локалното хранилище, се използват командите:

git add .

git commit -m "Коментар върху направените промени"

Качване на промените от локалното хранилище в отдалеченото

За качване на промените от локалното хранилище в отдалеченото:

git push

При изпълнение на последната команда, може да Ви бъде поискано потребителско име и парола или само парола за достъп до отдалеченото хранилище.

Игнориране на файлове

.gitignore

В процеса на работа по даден проект в директориите на проекта може да се наложи да стоят файлове, които нямат значение при пренасяне на проекта върху друга машина. Това може да бъдат автоматично генерирани от инструментите за разработка файлове, файлове необходими само върху дадената машина, или файлове, ползвани от потребителя, но нямащи нищо общо с дадения проект. Git използва текстов файл с име .gitignore, който се намира в главната директория на хранилището. Всеки ред от .gitignore представлява шаблон за имена на файлове, които се игнорират от Git.

Добавянето на шаблон в .gitignore трябва да се направи преди подаване на команда git add. Така посочените в .gitignore файлове не се добавят в локалното хранилище и техните промени не се следят повече от Git.

В случай, че в добавен в Git файл е направена промяна, която е необходима само в локалното му копие, но не трябва да се отразява от Git и да се качва в отдалечено хранилище (например, във файла е попълнена парола за достъп за конкретната машина, но тази парола не трябва да се вижда другаде), игнорирането на промените се извършва с команда:

git update-index --assume-unchanged имеНаФайл

Файл .gitignore се контролира от Git и се качва и в отдалеченото хранилище.

.git/info/exclude

Друг начин за игнориране е чрез вписване на шаблони за игнориране във файл: .git/info/exclude. Вписаните там правила не се отразяват в отдалеченото хранилище. Така могат да се игнорират файлове, които е малко вероятно да се появят в друго локално копие.

Ако даденото хранилище съдържа подмодули, то правила за игнориране се записват във файл:

.git/modules/имеНаМодул/info/exclude

Използване на Git през Qt Creator

Когато на компютъра има инсталиран команден Git клиент, той може да се използва директно от Qt Creator.

За изтегляне файловете на съхраняван в Git хранилище проект с Qt Creator се стартира нов проект с команда File → New File or Project..., избира се тип проект Import Project и тип на хранилището Git Clone, и се щраква бутона Choose...

В Window, ако все още не е посочена програмата Git клиент, която да се ползва от Qt Creator, ще се покаже страница с бутон за конфигуриране на Git. Щракнете бутона и в поле Prepend to PATH напишете пътя до директорията, в който се намира git.exe. Най-вероятно е това да е: C:UsersИмеНаПотребителAppDataLocalProgramsGitbin. Ако не сте сигурни, кой е пътя до тази директория, проверете с regedit в регистрите на Windows стойността на ключ: HKEY_CURRENT_USER → SOFTWARE → GitForWindows → InstallPath. Като добавите в края на този стринг "bin" ще получите, стринга, който трябва да попълните в Qt Creator. Щом попълните поле Prepend to PATH щракнете бутон Apply и повторете създаването на проект, изтеглен от Git хранилище.

В прозореца на Qt Creator за стартиране на нов проект от Git хранилище, в поле Repository въведете адреса на хранилището, а в поле Directory - името на директорията, в която ще се запишат свалените файлове. Щракнете бутон Continue.

За изтегляне на проекти с достъп с право за запис, изискващо удостоверяване с парола, Qt Creator използва ssh-askpass.

В mocOS този пакет се изтегля и инсталира, както е описано в:

https://github.com/theseal/ssh-askpass

За да може Qt Creator да открива и ползва този пакет трябва да се зададе в настройките Preferences... - Version Control – General – SSH prompt command:

/usr/local/bin/ssh-askpass

В Ubuntu този пакет се инсталира с команда от терминала:

sudo apt-get install ssh-askpass

В Windows ... за съжаление, без успех

https://sourceforge.net/projects/winsshaskpass/

https://sourceforge.net/projects/gxexplorer/files/Borland%20VCL50.BPL/VCL50.BPL/

Синхронизиране с повече хранилища

Възможна е ситуация, в която да се налага да поддържате Ваша версия на даден продукт, във Ваше хранилище, различно от официалното хранилище на оригиналния продукт. Например, с цел във Вашата версия да реализирате промени, които по някаква причина не могат да се осъществят в оригиналния продукт. Но заедно с Вашите промени искате периодично да интегрирате и всички новости, които се правят в оригиналния продукт. В тази случай ще се налага в локалното работно копие на изходния код да изтегляте промените, настъпили в оригиналното хранилище на продукта.

Git позволява да сваляте и съчетавате промени от повече от едно хранилище.

Командата:

git remote -v

показва с кои отдалечени хранилища е свързано Вашето локално копие. Например:

origin https://github.com/vanyog/moodle.git (fetch)
origin https://github.com/vanyog/moodle.git (push)

означава, че локалното хранилище е свързано само с едно отдалечено хранилище с име origin и адрес: https://github.com/vanyog/moodle.git

Добавяне на друго отдалечено хранилище се извършва с команда git remote add, например:

git remote add morigin https://github.com/moodle/moodle.git

добавя хранилище с име morigin, намиращо се на адрес htps://github.com/moodle/moodle.git

Премахване на отдалечено хранилище, имащо име morigin става с команда:

git remote rm morigin

Изтегляне и вмъкване на промените от това хранилище в локалното копие на кода става с команда:

git pull morigin

Разклоняване (Branching)

В едно git хранилище може да се съхраняват повече разклонения на изходния код на даден проект. Създаването на разклонение може да е необходимо, например, за да се изпробва някоя нова идея. Докато не бъде установено, че този нова идея е реализуема и води до положителен резултат, кодът по реализирането на тези идея се съхранява в отделно разклонение (branch). Когато реализирането на новата идея приключи успешно, то разклонението, в което тя е реализирана, се слива с разклонението, в което се съхранява оригиналния програмен код. Така новата функционалност се добавя в софтуерния проект. Междувременно в оригиналния програмен код може също да са правени промени, това няма да попречи на сливането на двете разклонения. Ако след сливане на разклоненията, вече няма нужда от добавеното разклонение, то може да се изтрие и разработването на софтуера да продължи без него.

Командата:

git branch

без аргументи, показва наличните разклонения, като текущото разклонение е отбелязано със *.

git branch -a

показва всички разклонения, а с опция -r – само разклоненията от отдалеченото хранилище.

Ново разклонение в локално копие на кода се създава с команда:

git branch имеНаРазклонение

След създаване на разклонение промените, които се правят в кода се отразяват само в това разклонение. Тези промени се добавят и запазват в локалното хранилище с командите:

git add .

git commit -m "Коментар върху направените промени"

Качване на новото разклонение в отдалеченото хранилище с направените в него промени се прави с команда

git push origin имеНаРазклонение

Актуализиране на локално копие с направените в отдалеченото хранилище промени се извършва с команда

git pull

която сваля промените от всички разклонения от отдалеченото хранилище.
Превключване към друго разклонение в локално копие на кода се извършва с:

git checkout имеНаРазклонение

Сливане на две разклонения, се извършва като първо се превключва към разклонението, в което ще се извърши сливане и след това се подава команда:

git merge имеНаРазклонение

в която имеНаРазклонение е името на разклонението, от което се вземат, направени промени, и се нанасят в текущото разклонение.

Изтриване на разклонение в локалното хранилище, от което са взети промени и то повече не е необходимо, става с команда:

git branch -d имеНаРазклонение

За изтриване на разклонение и от отдалеченото хранилище се използва команда:

git push origin –-delete имеНаРазклонение

Ако в отдалеченото хранилище някои разклонения са изтрити, при сваляне на промени с git pull, изтритите от отдалеченото хранилище разклонения не се изтриват автоматично и от локалното хранилище, там те продължават да стоят. За да бъдат изтрити локалните разклонения, които не съществуват в отдалеченото хранилище се изпълняват командите:

git fetch –-prune

git branch -vv

Последната команда показва списък на локалните разклонения, като в описанието на изтритите от отдалеченото хранилище разклонения присъства думата ": gone". Всяко такова разклонение се изтрива с git branch -d имеНаРазклонение.

Подмодули (submodules)

Когато в даден проект се използва програмен код от друг проект, който съществува отделно, със собствено хранилище, другия проект може да се добави във вид на подмодул с команда:

git submodule add URLнаХранилищетоНаДругияПроект

Вижте повече в 7.11 Git Tools - Submodules.

Използване на локално Git хранилище

Под локално хранилище имам предвид хранилище, което се намира на локалния компютър, а не на сървър в Интернет. Използването на такова дава всички предимства, които дава и отдалеченото хранилище – запазване на моментното състояние на кода, над който работите, във всеки момент, в който решите, и възможност за връщане до всяко от запазените състояния.

За да създадете локално хранилище, трябва да влезете от терминал в директория, която ще използвате за хранилище. Тя може да е празна, но може и да съдържа файлове, които бихте искали да се поставят под контрол на системата Git. Подава се команда:

git init

Ако директорията съдържа файлове, които искате да са под системата за контрол на версиите Git, подайте команда, която ще ги добави в създаденото хранилище:

git add .

а след това команда за запазване текущото състояние на тези файлове в хранилището:

git commit -m "Коментар за запазваното състояние"

След всяка поредица от промени, които искате да запазите, трябва да подадете двойката команди: git add . и git commit

Отмяната на неуспешни промени до последното, запазено в хранилището състояние на даден файл, става с команда:

git checkout имеНаФал

Отменяне на някои операции, направени с Git

Промени, отразени в локално копие

Съхранените с Git изменения, може да се видят с команда:

git log

показват се в обратен на времето ред – първо е най-новото запазване на промени.

Отмяна на добавянето на файлове, извършено с git commit:

git checkout имеНаФайл

Отмяна на последното запазване на промени, направено с
git commit:

git reset --soft HEAD^

git reset --hard HEAD^

Опция --hard се използва, в случай, че след последното запазване се направили още промени, които не са отразени в хранилището. Тези промени също се отменят.


 

 

Направено с MyCMS. Copyright CC BY-ND 4.0.