Използване на Git за реализирани с Qt проекти

Страницата е създадена на:23 декември 2019 и редактирана на:10 ноември 2024

Интернет връзки: Git(колекция връзки).

Съдържание

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

Обща информация

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

Софтуерът, с помощта на който програмистите използват Git се наричат git клиент. Съществуват и git клиенти с графичен интерфейс, като например: Sourcetree, с версии за Windows и Mac, но тук ще опишем работа с команден git клиент.

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

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

В macOS командният Git клиент е част от Xcode, така че щом инсталирате Xcode ще имате и Git. Git използва Command Line Tools for Xcode (около 3,39 GB), ето защо и този пакет слева да е наличен. Може да се инсталира с команда: xcode-select --install, или чрез изтегляне на инсталиращ пакет от developer.apple.com/download (страницата е достъпна след влизане с профил от Apple).

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

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

sudo apt install git

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

Използване на 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 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 не се напише имеНаДиректория, то се създава директория с име, съвпадащо с името на проекта.

За изтегляне само на последната актуализация, без цялостната история на промените:

git clone --depth=1 адресНаХранилище

В някои хранилища се използват хранилища подмодули (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 позволява да сваляте и съчетавате промени от повече от едно хранилище.

Командата:

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 имеНаФал

Етикети (тагове, tags)

Вижте: 2.6 Git Basics - Tagging.

Етикетите са средство за отбелязване на определени етапи от работата по даден проект. Обикновето това са моментите на реализиране на определени версии, например: v1.0.1 и т.н.

Списък на поставените етикети се вижда с команда: git tag

Етикетите биват два вида: lightweight (олекотени) и annotated (с прикачена бележка).

Олекотен етикет се създава с команда git tag етикет
където етикет е самия етикет, нещо от вида: v2.2.0, v1.0 alpha, v0.58 beta или друго подобно.

Етикет с добавена бележка се създава с команда git tag -a етикет -m "Текст на бележката"

Добавеният етикет се асоциира с текущото състояние на локалното хранилище. При команда git push етикетът не се прехвърля в отдалеченото хранилище, освен ако не се посочи изрично с git push origin етикет

Подробна информация за етикет и отбелязаното с него състояние на хранилището се показва с команда git show етикет

Етикет се изтрива от локално хранилище с команда git tag -d етикет
а от отдалечено - с команда git push origin --delete етикет

Скриване на промени (команда stash)

Git - git-stash Documentation

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

git stash - скрива локалните промени, които се натрупват в подобна на стек структура.
git stash list - показва списък на скритите промени.
git stash show - показва, кои файлове са засегнати във всяка от скритите промени.
git stash apply - връща последната скрита промяна, без да я премахва.
git stash apply - връща последната скрита промяна, и я премахва. git stash clear - изтрива всички скрити промени.

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

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

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

git log

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

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

git checkout имеНаФайл

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

git reset --soft HEAD^

git reset --hard HEAD^

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

Премахване на файл от Git, без да бъде изтрит от локалната директория:

git rm --cached имеНаФайл

Някои проблеми

Смяна на паролата

При ползване на Git, потребителското име и паролата за достъп до отдалеченото хранилище, необходими за качване на промени там, веднъж зададени се запазват, и не е необходимо тяхното въвеждане при всяка команда git push. Ако в отдалеченото хранилище те бъдат променени по някаква причина, git push завършва със съобщение за невалидна парола. Необходимо е премахване на запаметената от Git парола с:

git config --global --unset user.password

При следващо изпълнение на Git команда, която изисква удостоверяване, ще се покаже възможност за въвеждане на нови данни.

Прекъснат git процес

Съобщение:

Another git process seems to be running in this repository, e.g.
an editor opened by 'git commit'. Please make sure all processes
are terminated then try again. If it still fails, a git process
may have crashed in this repository earlier:
remove the file manually to continue.

Ръчно се изтрива файл .git/inddex.lock


 

Copyright CC BY-ND 4.0.
Посещения на страницата: общо 4218 днес 0
Направено с VanyoG CMS.
Force Reload