-
1. Почеток
- 1.1 За верзиска контрола
- 1.2 Кратка историја на Git
- 1.3 Основи на Гит
- 1.4 Командната линија
- 1.5 Инсталирање на Git
- 1.6 First-Time Git Setup
- 1.7 Getting Help
- 1.8 Заклучок
-
2. Основите на Git
-
3. Гранење во Git
- 3.1 Гранење објаснето
- 3.2 Основно разгранување и спојување
- 3.3 Branch Management
- 3.4 Работни процеси
- 3.5 Далечински гранки
- 3.6 Ребаза
- 3.7 Заклучок
-
4. Git на Сервер
- 4.1 Протоколите
- 4.2 Добивање на Git на сервер
- 4.3 Генерирање на вашиот SSH јавен клуч
- 4.4 Поставување на серверот
- 4.5 Гит демон
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Опции за домаќини на трети лица
- 4.10 Заклучок
-
5. Дистрибуиран Git
- 5.1 Дистрибуирани работни процеси
- 5.2 Придонес кон проект
- 5.3 Приватен мал тим
- 5.4 Одржување на проект
- 5.5 Заклучок
-
6. GitHub
-
7. Git Алатки
- 7.1 Revision Selection
- 7.2 Интерактивно стажирање
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Напредно спојување
- 7.9 Rerere
- 7.10 Дебагирање со Git
- 7.11 Submodules
- 7.12 Збивање
- 7.13 Заменување
- 7.14 Складирање на ингеренции
- 7.15 Заклучок
-
8. Персонализација на Git
- 8.1 Git Configuration
- 8.2 Git Атрибути
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Заклучок
-
9. Git и други системи
- 9.1 Git како Клиент
- 9.2 Мигрирање кон Git
- 9.3 Заклучок
-
10. Внатрешноста на Git
- 10.1 Plumbing and Porcelain
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Packfiles
- 10.5 The Refspec
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Заклучок
-
A1. Appendix A: Git во други околини
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git in Powershell
- A1.7 Заклучок
-
A2. Appendix B: Вметнување на Git во вашите апликации
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
-
A3. Appendix C: Git команди
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
7.12 Git Алатки - Збивање
Збивање
Иако ние ги опфаќаме општите начини за пренос на Git податоци преку мрежа (HTTP, SSH, итн), всушност постои уште еден начин да се направи тоа што не се користи вообичаено, но всушност може да биде доста корисно.
Git е способен да ги "збие" своите податоци во една датотека.
Ова може да биде корисно во различни сценарија.
Можеби вашата мрежа е долу и сакате да испратите промени на вашите соработници.
Можеби работите некаде надвор од локацијата и немате пристап до локалната мрежа поради безбедносни причини.
Можеби вашата безжична / етернет картичка едноставно се скрши.
Можеби немате пристап до заеднички сервер за момент, сакате да испраќате е-пошта на некој ажурирање и не сакате да префрлите 40 обврски преку формат-печ
.
Ова е местото каде командата git bundle
може да биде корисна.
Командата bundle
ќе го спакува сето она што вообичаено ќе се турка преку жицата со командата` git push` во бинарна датотека која може да му ја испратите на некој или да ставите флеш диск, а потоа да се оддели во друго складиште.
Ајде да видиме едноставен пример. Да речеме дека имате репозиториум со две обврски:
$ git log
commit 9a466c572fe88b195efd356c3f2bbeccdb504102
Author: Scott Chacon <schacon@gmail.com>
Date: Wed Mar 10 07:34:10 2010 -0800
second commit
commit b1ec3248f39900d2a406049d762aa68e9641be25
Author: Scott Chacon <schacon@gmail.com>
Date: Wed Mar 10 07:34:01 2010 -0800
first commit
Ако сакате да го испратите тоа складиште на некого и немате пристап до складиштето за да притиснете, или едноставно не сакате да го поставите едно, можете да го вклучите со git bundle create
.
$ git bundle create repo.bundle HEAD master
Counting objects: 6, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (6/6), 441 bytes, done.
Total 6 (delta 0), reused 0 (delta 0)
Сега имате датотека со име repo.bundle
која ги има сите податоци потребни за повторно креирање на` господар` филијала на складиштето на складиштето.
Со командата bundle
треба да ја наведете секоја референца или одреден опсег на обврски кои сакате да ги вклучите.
Ако имате намера ова да биде клонирано некаде на друго место, треба да додадете HEAD како референца, како и тука.
Можете да ја испратите оваа датотека repo.bundle
на некој друг, или да ја ставите на USB-уред и да ја преместите.
Од друга страна, велат дека сте испратени оваа датотека repo.bundle
и сакате да работите на проектот.
Можете да клонирате од бинарната датотека во директориумот, слично како и вие од URL-то.
$ git clone repo.bundle repo
Cloning into 'repo'...
...
$ cd repo
$ git log --oneline
9a466c5 second commit
b1ec324 first commit
Ако не ги вклучувате HEAD во референци, исто така мора да наведете "-b master" или која било гранка е вклучена, бидејќи во спротивно нема да знае која гранка да се провери.
Сега да речеме да направите три обврски на неа и сакате да го испратите новиот обврзува назад преку пакет на USB стик или е-пошта.
$ git log --oneline
71b84da last commit - second repo
c99cf5b fourth commit - second repo
7011d3d third commit - second repo
9a466c5 second commit
b1ec324 first commit
Прво треба да го одредиме опсегот на обврските што сакаме да ги вклучиме во пакетот. За разлика од мрежните протоколи кои го одредуваат минималниот сет на податоци за пренос преку мрежа за нас, ние ќе треба да го разгледаме ова рачно. Сега, можете едноставно да го сторите истото и да го вклучите целото складиште кое ќе работи, но подобро е само да ја разделите разликата - само трите обврски што ги направивме само на локално ниво.
За да го направите тоа, ќе треба да ја пресметате разликата.
Како што е опишано во << _commit_ranges >>, можете да наведете голем број на обврски на повеќе начини.
За да ги добиеме трите обврски што ги имаме во нашата господарска гранка, кои не беа во гранката, ние првично клониравме, може да користиме нешто како "потекло / господар .. мастер" или "господар ^ потекло / господар".
Можете да го тестирате тоа со командата log
.
$ git log --oneline master ^origin/master
71b84da last commit - second repo
c99cf5b fourth commit - second repo
7011d3d third commit - second repo
Па сега кога имаме листа на обврски кои сакаме да ги вклучиме во пакетот, да ги вклучиме.
Ние го правиме тоа со командата git bundle create
, давајќи го името на датотеката за која сакаме да биде нашиот пакет и опсегот на обврските што сакаме да ги внесеме.
$ git bundle create commits.bundle master ^9a466c5
Counting objects: 11, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (9/9), 775 bytes, done.
Total 9 (delta 0), reused 0 (delta 0)
Сега имаме датотека commits.bundle
во нашиот директориум.
Ако го земеме тоа и го испратиме на нашиот партнер, таа може да го увезе во оригиналното складиште, дури и ако во меѓувреме има направено повеќе работа.
Кога ќе го добие пакетот, таа може да го испита тоа за да види што содржи, пред да го внесе во нејзиното складиште.
Првата команда е командата bundle verify
која ќе осигури дека датотеката всушност е валиден пакет на Git и дека ги имате сите потребни предци за правилно да го реконструирате.
$ git bundle verify ../commits.bundle
The bundle contains 1 ref
71b84daaf49abed142a373b6e5c59a22dc6560dc refs/heads/master
The bundle requires these 1 ref
9a466c572fe88b195efd356c3f2bbeccdb504102 second commit
../commits.bundle is okay
Доколку пакетот создаде пакет на само последните две обврски што ги направиле, наместо сите три, оригиналното складиште нема да може да го увезе, бидејќи му недостасува потребната историја.
Командата verify
би изгледала вака:
$ git bundle verify ../commits-bad.bundle
error: Repository lacks these prerequisite commits:
error: 7011d3d8fc200abe0ad561c011c3852a4b7bbe95 third commit - second repo
Сепак, нашиот прв пакет е валиден, за да можеме да превземеме обврски од него. Ако сакате да видите кои гранки се наоѓаат во пакетот што може да се увезуваат, исто така постои и команда која само ги набројува главите:
$ git bundle list-heads ../commits.bundle
71b84daaf49abed142a373b6e5c59a22dc6560dc refs/heads/master
Под-командата потврди
ќе ви ги каже и главите.
Поентата е да се види што може да се влече, така што можете да ги користите командите fetch
или` pull` за да увезете обврски од овој пакет.
Овде ќе ја донесиме "господар" гранката на пакетот до филијала со име "друг господар" во нашето складиште:
$ git fetch ../commits.bundle master:other-master
From ../commits.bundle
* [new branch] master -> other-master
Сега можеме да видиме дека имаме увозни обврски на гранката "друг господар", како и какви било обврски што сме ги направиле во меѓувреме во нашата "master" гранка.
$ git log --oneline --decorate --graph --all
* 8255d41 (HEAD, master) third commit - first repo
| * 71b84da (other-master) last commit - second repo
| * c99cf5b fourth commit - second repo
| * 7011d3d third commit - second repo
|/
* 9a466c5 second commit
* b1ec324 first commit
Значи, git bundle
може да биде навистина корисно за споделување или вршење мрежни операции кога немате соодветна мрежа или споделено складиште за да го направите тоа.