Гіт для початківців: остаточний практичний посібник


854

Добре, побачивши цей пост від PJ Hyett , я вирішив пропустити до кінця і піти з Git .

Тому мені потрібно практичне керівництво для Git для початківців . "Початківець" визначається як хтось, хто знає, як поводитися зі своїм компілятором, якийсь рівень розуміє, що таке Makefile , і торкнувся керування джерелами, не дуже добре його розуміючи.

"Практичний" визначається так, як ця людина не хоче детально описуватись тим, що робить Git у фоновому режимі, і навіть не байдуже (чи знає), що його розповсюджують. Ваші відповіді можуть натякати на можливості, але постарайтеся націлити на початківця, який хоче зберегти "основне" сховище на "сервері", який є резервним копією та захищеним, і трактуйте їх локальний сховище лише як "клієнтський" ресурс.

Тому:

Встановлення / налаштування

Робота з кодом

Позначення, розгалуження, випуски, базові лінії

Інший

  • Опишіть і посилайтеся на хороший графічний інтерфейс, плагін IDE тощо, що робить Git ресурсом не командного рядка, але, будь ласка, перелічіть його обмеження, а також його корисність.
    • msysgit - Кросова платформа, включена до Git
    • gitk - переглядач історії крос-платформ, включений до Git
    • gitnub - Mac OS X
    • gitx - переглядач історії Mac OS X
    • smartgit - Крос-платформа, комерційна, бета-версія
    • tig - консольний графічний інтерфейс для Linux
    • qgit - GUI для Windows, Linux
    • Git Extensions - пакет для Windows, включає дружній графічний інтерфейс
  • Будь-які інші поширені завдання, які повинен знати початківець?
  • Як я можу ефективно працювати з сховищем субверсії, встановленим як джерело управління джерелом?

Інші посилання для початківців Git

Заглиблюючись у Git

Я час від часу переглядатиму записи та прибираю їх, щоб вони мали послідовний вигляд та відчуття, і легко сканувати список - сміливо дотримуйтесь простого "заголовка - короткого пояснення - списку інструкцій - gotchas та додаткову інформацію ". Я також посилаюсь на записи зі списку куль, наведених вище, тому їх легко знайти пізніше.

Відповіді:


118

Як ви створюєте новий проект / сховище?

Репозиторій git - це просто каталог, що містить спеціальний .gitкаталог.

Це відрізняється від "централізованих" систем управління версіями (наприклад, підрив), де на віддаленому сервері розміщується "сховище", яке ви перейдете checkoutв каталог "робочої копії". З git ваша робоча копія - це сховище.

Просто запустіть git initу каталозі, який містить файли, які ви хочете відстежувати.

Наприклад,

cd ~/code/project001/
git init

Це створює .git(приховану) папку в поточному каталозі.

Щоб створити новий проект, запустіть git initдодатковий аргумент (назва каталогу, який потрібно створити):

git init project002

(This is equivalent to: mkdir project002 && cd project002 && git init)

Щоб перевірити, чи поточний поточний шлях знаходиться у сховищі git, просто запустіть git status- якщо це не сховище, воно повідомить "fatal: Не git сховище"

Ви також можете вказати список .git каталог та перевірити, чи він містить файли / каталоги, подібні до наведених нижче:

$ ls .git
HEAD         config       hooks/       objects/
branches/    description  info/        refs/

Якщо з будь-якої причини ви хочете "де-git" сховище (ви не хочете використовувати git для відстеження цього проекту). Просто видаліть .gitкаталог на базовому рівні сховища.

cd ~/code/project001/
rm -rf .git/

Попередження: Це знищить усю історію редагування, всі ваші теги, усе , що було зроблено. Це не торкнеться "поточних" файлів (файли, які ви можете бачити на даний момент), але попередні зміни, видалені файли тощо не вдасться відновити!


3
Git робить його об'єкти лише для читання, тому вам потрібно rm -rf .gitбуде видалити базу даних git.
Джош Лі

Зазвичай файл .gitignore повинен бути створений під час звичайного використання для вказівки файлів / дерев, які слід ігнорувати у версії, так що для завершення останньої частини "де-gitting", крім видалення .git, вам також потрібно буде видалити. файл gitignore. :)
Мономан

Як щодо голих сховищ? Вони якимось чином "централізовані", і я думаю, що вони хороші для багатьох проектів, яким потрібна якась централізація (наприклад: проекти, розроблені багатьма людьми)
peoro

WRT працює git statusдля того, щоб переконатися, що ви знаходитесь у сховищі: у цього є одна gotcha: якщо у вашій поточній оболонці встановлена ​​змінна середовища $ GIT_DIR, git ігнорує ваше поточне місцезнаходження та використовує сховище в $ GIT_DIR. Я повинен знати, я втратив годину на це вчора.
sanmiguel

110

GUI для git


Git GUI

У комплекті з git - Запускайте git guiз командного рядка, і інсталятор Windows msysgit додає його до меню "Пуск".

Графічний інтерфейс Git може зробити більшість того, що вам потрібно зробити з git. У тому числі зміни стадій, налаштування git та сховищ, натискання змін, створення / оформлення / видалення гілок, об'єднання та багато іншого.

Однією з моїх улюблених функцій є комбінації клавіш "рядок сцени" та "переговори до сцени" у меню правої кнопки миші, що дозволяє робити певні частини файлу. Ви можете досягти того ж за допомогою git add -i, але я вважаю, що це простіше у використанні.

Це не найкрасивіший додаток, але він працює майже на всіх платформах (базується на Tcl / Tk)

Знімки екрана | екранна трансляція


GitK

Також входить до складу git. Це переглядач історії git і дозволяє візуалізувати історію сховища (включаючи гілки, коли вони створені та об'єднані). Ви можете переглядати та шукати комісії.

Гарно йде разом з git-gui.


Гітнуб

Додаток Mac OS X Переважно еквівалент git log, але має певну інтеграцію з github (як-от "Перегляд мережі").

Виглядає досить і відповідає Mac OS X. Ви можете шукати в сховищах. Найбільший критичний показник Gitnub полягає в тому, що він показує історію лінійно (по одній гілці за один раз) - він не візуалізує розгалуження та злиття, що може бути важливим для git, хоча це планове вдосконалення.

Завантажити посилання, змінити журнал та знімки екрана | git сховище


GitX

Має бути "клоном gitk для OS X".

Він може візуалізувати нелінійну історію розгалуження, виконувати комікси, переглядати та шукати комісії, а також має деякі інші приємні функції, такі як можливість "Швидкого перегляду" будь-якого файлу в будь-якій редакції (натисніть пробіл у вікні списку файлів), експортувати будь-який файл (за допомогою перетягування).

Він набагато краще інтегрується в OS X, ніж git-gui/ gitk, і є швидким та стабільним навіть у надзвичайно великих сховищах.

Оригінальний питер- репозиторій git останнім часом не оновлювався (більше року під час написання). Більш активно підтримувана гілка доступна на Brotherbard / gitx - вона додає "бічну панель, витягнути, потягнути, натиснути, додати віддалене, злиття, вишневий вибір, ребазування, клон, клонування"

Завантажити | Знімки екрана | git сховище | вилка братерда | качанна вилка


SmartGit

З домашньої сторінки:

SmartGit - це передумови для розподіленої системи управління версіями Git та працює в Windows, Mac OS X та Linux. SmartGit призначений для розробників, які віддають перевагу графічному інтерфейсу користувача через клієнт командного рядка, щоб бути ще продуктивнішим з Git - найпотужнішим на сьогодні DVCS.

Ви можете завантажити його з їх веб-сайту .

Завантажити


TortoiseGit

Версія TortoiseSVN Git для користувачів Windows.

Це передача TortoiseSVN до TortoiseGit Остання версія 1.2.1.0 Цей випуск може виконати звичайне завдання, таке фіксація, показ журналу, відмінність двох версій, створення гілки та тегів, створення патчу тощо. Докладніше див. Примітки до випуску . Ласкаво просимо долучитись до цього проекту.

Завантажити


QGit

QGit - це програма перегляду графічного інтерфейсу git, побудована на Qt / C ++.

За допомогою qgit ви зможете переглядати історію редакцій, переглядати вміст виправлень та змінені файли, графічно дотримуючись різних галузей розвитку.

Завантажити


gitg

gitg - переглядач репозиторію git, орієнтований на gtk + / GNOME. Однією з його головних цілей є надання більш уніфікованого користувальницького досвіду для git фронталів на різних робочих столах. Це робить не написання кросплатформенної програми, а тісна співпраця з аналогічними клієнтами для інших операційних систем (наприклад, GitX для OS X).

Особливості

  • Переглянути історію редагувань
  • Обробляйте великі сховища (завантажує Linux-сховище, 17000+ версій за 1 секунду).
  • Внести зміни.
  • Етап / нестабільність окремих полювань.
  • Скасувати зміни.
  • Показати кольорову різницю змін у редакціях.
  • Огляд дерева для заданої редакції.
  • Експортуйте частини дерева заданої редакції.
  • Вкажіть будь-який респект, який така команда, як 'git log' може зрозуміти, будує історію.
  • Показуйте та перемикайте між гілками у вікні історії.

Завантажити: випуски чи джерело


Gitbox

Gitbox - графічний інтерфейс Mac OS X для системи управління версіями Git. В одному вікні ви бачите гілки, історію та стан робочого каталогу.

Щоденні операції прості: зміни етапів і нестабільності за допомогою прапорця. Зробіть, потягніть, з’єднайте та натисніть одним натисканням. Двічі клацніть зміну, щоб відобразити відмінності з FileMerge.app.

Завантажити


Гіті

Веб-сайт Gity не має великої кількості інформації, але на скріншотах на ньому, схоже, є функція з відкритим кодом з відкритим кодом OS X git gui.

Завантажити або джерело


Форма

Meld - це візуальний інструмент розрізнення та злиття. Ви можете порівняти два-три файли та відредагувати їх на місці (відрізняється оновленням динамічно). Можна порівняти дві-три папки та запустити порівняння файлів. Ви можете переглядати та переглядати робочу копію з популярних систем контролю версій, таких як CVS, Subversion, Bazaar-ng та Mercurial [ і Git ].

Завантаження


Катана

Git GUIfor OSX Стіва Декорте.

З першого погляду перегляньте, які віддалені гілки мають зміни, а місцеві репозиції мають зміни, які потрібно натиснути. Підтримуються git ops додавання, фіксації, натискання, витягування, тегів та скидання, а також візуальні розрізнення та візуальний перегляд ієрархії проектів, що висвітлює локальні зміни та доповнення.

Безкоштовно для 1 сховища, 25 доларів для більше.

Завантажити


Паросток (раніше GitMac)

Зосереджується на тому, щоб зробити Git простим у використанні. Оснащений інтерфейсом з натуральним какао (подібний до Mac), швидким переглядом сховищ, клонуванням, натисканням / перетягуванням, розгалуженням та злиттям, візуальною різницею, віддаленими гілками, легким доступом до Терміналу та іншим.

Роблячи найбільш часто використовувані дії Git інтуїтивно зрозумілими та легкими у виконанні, Sprout (раніше GitMac) робить Git зручним для користувачів. Сумісний з більшістю робочих процесів Git, Sprout чудово підходить для дизайнерів та розробників, для спільної роботи в команді та просунутих та початківців користувачів.

Завантажити | Веб-сайт


Вежа

Багатофункціональний графічний інтерфейс Git для Mac OSX. 30-денна безкоштовна пробна версія, 59 доларів США за ліцензію для одного користувача.

Завантажити | Веб-сайт


EGit

EGit - постачальник команд Eclipse для системи управління версіями Git. Git - це розподілений SCM, що означає, що кожен розробник має повну копію всієї історії кожного перегляду коду, що робить запити проти історії дуже швидкими та універсальними.

Проект EGit реалізує інструментарій Eclipse поверх JGit Java-реалізації Git.

Завантажити | Веб-сайт


Розширення Git

Open Source для Windows - встановлює все необхідне для роботи з Git в одному пакеті, простий у використанні.

Git Extensions - це інструментарій, який робить роботу з Git на Windows більш інтуїтивно зрозумілою. Розширення оболонки буде вбудованим у Провідник Windows та представлятиме контекстне меню файлів та каталогів. Існує також плагін Visual Studio для використання git від Visual Studio.

Завантажити

Велика подяка dbr за те, що він розробив речі з git gui.


SourceTree

SourceTree - безкоштовний клієнт Mac для Git, Mercurial та SVN. Побудований Atlassian, люди, що стоять за BitBucket, здається, працюють однаково добре з будь-якою системою ВК, що дозволяє вам освоїти єдиний інструмент для використання з усіма своїми проектами, однак вони контролюються версіями. Функція упакована та БЕЗКОШТОВНА.

Для експертів, готових та функціональних, як для початківців, так і для досвідчених користувачів:

Перегляньте вихідні та вхідні набори змін. Вишня між гілками. Обробка патчів, реставрація, приховування / полиця та багато іншого.

Завантажити | Веб-сайт



2
У вас є кілька хороших відповідей (особливо gitcasts та відповіді push / pull), але чи можу я порекомендувати розділити їх на окремі відповіді? Запитувач запитував, щоб ви "не намагалися заглушити купу інформації в одну відповідь"!
дбр

3
Можливо, ви повинні додати TortoiseGit code.google.com/p/tortoisegit до свого списку для Windows gitters ...
kret

1
Gity ( macendeavor.com/gity ) - це варіант, але все ще розвивається (OS X)
Дейв ДеЛонг

2
Tower ("Найпотужніший клієнт Git для Mac") - це прекрасний новий клієнт для Git.
rubiii

59

Ну, незважаючи на те, що ви запитували, що ми не «просто» посилаємось на інші ресурси, це досить нерозумно, коли вже існує ресурс, що вирощується (і зростає) громадою, що справді непогано: Книга Git Community . Якщо серйозно, ці питання з 20+ у запитанні будуть не що-небудь стислим та послідовним. Книга спільноти Git доступна як у форматі HTML, так і у форматі PDF та відповідає на багато ваших запитань чіткими, добре відформатованими та рецензованими відповідями та у форматі, що дозволяє перейти безпосередньо до вашої проблеми.

На жаль, якщо моя публікація вас справді засмутила, то я її видалю. Просто скажіть так.


2
Якщо ви не використовуєте git, оскільки це DVCS, навіщо взагалі турбуватися з використанням git? Це питання є дурним і відволікає ресурси, які можна витратити на інші речі для задоволення сумнівної мети.
Рандаль Шварц

56

Як налаштувати його на ігнорування файлів:

Можливість мати git ігнорувати файли, які ви не хочете, щоб вони відстежували, дуже корисна.

Щоб ігнорувати файл або набір файлів, ви надаєте шаблон. Синтаксис шаблону для git досить простий, але потужний. Це стосується всіх трьох різних файлів, які я згадаю нижче.

  • Порожній рядок ігнорує жодні файли, він зазвичай використовується як роздільник.
  • Рядки, на яких зображено #, служать коментарями.
  • The !префікс необов’язковий і буде нівелювати шаблон. Будь-який заперечений візерунок, який відповідає, замінить шаблони нижчого пріоритету.
  • Підтримує розширені вирази та підказки
    • Наприклад: Шаблон: *. [Oa] буде ігнорувати всі файли у сховищі, що закінчуються на .o або .a (файли об'єктів та архівів)
  • Якщо шаблон має каталог, що закінчується нарізкою, слід відповідати лише цьому каталогу та шляхам під ним. Це виключає звичайні файли та символічні посилання з матчу.
  • Провідна коса коса риса буде відповідати всім файлам у цьому імені шляху.
    • Наприклад: шаблон /*.c буде відповідати файлу foo.c, але не bar / awesome.c

Чудовий приклад зі сторінки чоловіка gitignore (5) :

$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
#       Documentation/gitignore.html
#       file.o
#       lib.a
#       src/internal.o
[...]
$ cat .git/info/exclude
  # ignore objects and archives, anywhere in the tree.
  *.[oa]
$ cat Documentation/.gitignore
# ignore generated html files,
*.html
# except foo.html which is maintained by hand
!foo.html
$ git status
[...]
# Untracked files:
[...]
#       Documentation/foo.html
[...]

Як правило, є три різні способи ігнорувати незатребувані файли.

1) Ігнорувати для всіх користувачів сховища:

Додайте файл під назвою .gitignore до кореня вашої робочої копії.

Відредагуйте .gitignore, щоб відповідати вашим налаштуванням, які файли слід / не слід ігнорувати.

git add .gitignore 

і виконувати, коли ви закінчите.

2) Ігноруйте лише вашу копію сховища:

Додайте / відредагуйте файл $ GIT_DIR / info / виключіть у своїй робочій копії із бажаними шаблонами.

Напр .: Моя робоча копія ~ / src / project1, тому я б редагував ~ / src / project1 / .git / info / виключити

Ви закінчили!

3) Ігноруйте в усіх ситуаціях у вашій системі:

Глобальні шаблони ігнорування для вашої системи можуть містити файл, названий тим, що ви хочете.

Шахта особисто називається ~ / .gitglobalignore

Тоді я можу повідомити Git про цей файл, відредагувавши мій файл ~ / .gitconfig у наступному рядку:

core.excludesfile = ~/.gitglobalignore

Ви закінчили!

Я вважаю, що сторінка людини gitignore є найкращим ресурсом для отримання додаткової інформації.


Може хтось, будь ласка, додати до цієї публікації одну незначну, але важливу деталь? Це працює лише для файлів, які вже не відслідковуються git. Щоб "зняти" файл, але залишити його у файловій системі, вам потрібно "git rm - кешоване ім'я файлу". Дякую!
Микита Рибак

Я просто хочу зазначити, що додавання рядка core.excludesfile не працювало для мене. Мені довелося [git config --global core.excludesfile ~ / .gitglobalignore], щоб змусити його працювати.
Кодування району

Зараз на Github є проект під назвою gitignore, який містить файли gitignore для різних мов та середовищ розробки: github.com/github/gitignore
Ryan Lundy,

47

Як ви "тегуєте" певний набір змін

Як ви "позначаєте" тег "чи" випускаєте "певний набір редакцій для певного набору файлів, щоб ви завжди могли перетягнути його пізніше?

Використання git tagкоманди.

Щоб просто "тегнути" поточну версію, ви просто запустите ..

git tag -a thetagname
git tag -a 0.1
git tag -a 2.6.1-rc1 -m 'Released on 01/02/03'

Щоб перерахувати поточні теги, просто запустіть git tagбез аргументів або -l(малі регістри L):

$ git tag -a thetagname # and enter a message, or use -m 'My tag annotation'
$ git tag -l
thetagname

Щоб видалити тег, ви використовуєте -dпрапор:

$ git tag -d thetagname 
Deleted tag 'thetagname'
$ git tag
[no output]

Щоб позначити певну (попередню) комісію, ви просто зробите ..

git tag [tag name] [revision SHA1 hash]

Наприклад:

git tag 1.1.1 81b15a68c6c3e71f72e766931df4e6499990385b

Примітка: за замовчуванням git створює "легкий" тег (в основному посилання на певну редакцію). "Правильний" спосіб - використовувати -aпрапор. Це запустить ваш редактор із запитом повідомлення про тег (ідентичний запиту повідомлення про фіксацію; ви також можете використовувати -mпрапор для подання повідомлення про теги в командному рядку). Використання анотованого тегу створює об'єкт із власним ідентифікатором, датою, тегером (автором) та, можливо, підписом GPG (використовуючи -sтег). Детальну інформацію про це дивіться у цій публікації

git tag mytagwithmsg -a -m 'This is a tag, with message'

І щоб перелічити теги з анотаціями, використовуйте -n1прапор, щоб показати 1 рядок кожного тегу повідомлення ( -n245щоб показати перші 245 рядків кожної примітки тощо):

$ git tag -l -n1
mytagwithmsg    This is a tag, with message

Для отримання додаткової інформації див. Сторінку git-tag (1) Сторінка посібника


git tag не створює теги за замовчуванням, просто легкі посилання. Ви повинні використовувати або -a або -s, щоб створити тег-об’єкт (який використовуються такі речі, як опис): rockstarprogrammer.org/post/2008/oct/16/…
Дастін

Ах, цікаво. Спасибі, я оновив відповідь , щоб відобразити це
DBR

І як ви помітите попередньо здійснену редакцію? (вибачте, що це занадто довго, щоб я проскочив, чи щось я пропустив?)
Хазен

Hasen J: Додана інформація для відповіді, в основномуgit tag tagname revision_SHA1
DBR

1
Щоб вставити теги у віддалений репо, додайте - теги під час використання git push (інформація з довідкової області github).
Гектор Рамос

46

Приклад робочого процесу з GIT.

Git надзвичайно гнучка і добре пристосовується до будь-якого робочого процесу, але невиконання певного робочого процесу може негативно вплинути на ускладнення розуміння того, що можна зробити з git за межами лінійного "резервного" робочого процесу, і наскільки корисним може бути розгалуження, наприклад .

Ця публікація в блозі добре пояснює дуже простий, але ефективний робочий процес, який дуже легко налаштувати за допомогою git.

цитуючи з публікації в блозі: Ми вважаємо, що походження / master є основною гілкою, де вихідний код HEAD завжди відображає стан, готовий до виробництва:

Робочий процес став досить популярним, щоб зробити проект, який реалізує цей робочий процес: git-flow

Хороша ілюстрація простого робочого процесу, коли ви вносите всі свої зміни в розвиток, і лише натискаєте на освоєння, коли код знаходиться у виробничому стані:

простий робочий процес

Тепер скажемо, що ви хочете працювати над новою функцією або над рефакторингом модуля. Ви можете створити нову гілку, яку ми можемо назвати гілкою "функції", що займе певний час і може зламати якийсь код. Після того, як ваша функція буде "досить стабільною" і хочете перенести її "ближче" до виробництва, ви об'єднаєте свою галузь функцій у розробку. Коли всі помилки розібрані після злиття і ваш код пройде всі випробування рок-солід, ви внесете свої зміни в головний.

Під час всього цього процесу ви виявляєте жахливу помилку безпеки, яку потрібно виправити відразу. Ви можете мати гілку, що називається виправленнями, які вносять зміни, які відсуваються швидше назад у виробництво, ніж звичайні гілки "розвиваються".

Тут ви маєте ілюстрацію того, як може виглядати цей функція / виправлення / розвиток / виробничий процес (добре пояснено у публікації блогу, і я повторюю, що в блозі пояснюється весь процес набагато детальніше та набагато краще, ніж я .

Приклад робочого процесу Git


Я новачок, і ця схема робить мене більш заплутаною.
finnw

Який, перший чи останній? Я не дуже хотів робити публікацію занадто довго, але пізніше додам невелике пояснення обох діаграм.
ясен

Прочитайте повну статтю. Я також заплутався в цій схемі, але в блозі дуже добре написано nvie.com/posts/a-successful-git-branching-model
Феліпе Сабіно

зараз краще? Я хотів лише дати чіткий огляд, а не
репостувати

39

Ось копія публікації PJ Hyett, оскільки вона вже недоступна:

Git - не важко

23 листопада 2008 року

Коли ми кажемо людям, чому вони повинні використовувати Git over Subversion, перехідна лінія полягає в тому, що "Git робить Subversion краще, ніж Subversion, але це робить набагато більше, ніж це".

"Багато іншого" складається з купки речей, які змушують Git дійсно сяяти, але це може бути досить непомітно для тих, хто походить від інших SCM, таких як Subversion.

З цього приводу, ніщо не заважає вам використовувати Git так само, як ви використовуєте Subversion під час переходу.

Якщо припустити, що ви встановили необхідне програмне забезпечення та десь віддалене сховище, ось як би ви захопили код і відтіснили зміни назад із Subversion:

$ svn checkout svn://foo.googlecode.com/svn/trunk foo
# make your changes
$ svn commit -m "my first commit"

А як би ви це зробили в Git:

$ git clone git@github.com:pjhyett/foo.git
# make your changes
$ git commit -a -m "my first commit"
$ git push

Ще одна команда зробити це в Git. Ця додаткова команда має великі наслідки, але для цілей цієї публікації це все, про що ми говоримо, одна додаткова команда.

Бачите, насправді це не так складно.

Оновлення. Мені б не дозволено також згадати, що еквівалент оновлення вашої локальної копії в Subversion порівняно з Git є svn updateі git pull, відповідно. Лише одна команда в обох випадках.


У першому прикладі я бачу, що ви переглядаєте відносний шлях, ./fooале для клона get не вказаний шлях, куди ви це перевіряєте?
JD Isaacks

33

Як встановити Git

У Windows:

Встановити msysgit

Є кілька завантажень:

  • Git: Використовуйте це, якщо конкретно вам не потрібен один із інших варіантів нижче.
  • PortableGit: використовуйте це, якщо ви хочете запустити Git на ПК без встановлення на цьому ПК (наприклад, запуск Git з USB-накопичувача)
  • msysGit: Використовуйте це, якщо ви хочете розробити сам Git. Якщо ви просто хочете використовувати Git для свого вихідного коду, але не хочете редагувати вихідний код Git , вам це не потрібно.

Сюди також встановлюється оболонка Cygwin bash, тому ви можете використовувати gitприємніший оболонку (ніж cmd.exe), а також включає git-gui (доступний за допомогою git guiкоманди чи Start > All Programs > Gitменю)

Mac OS X

Використовуйте інсталятор git-osx , або ви також можете встановити його з джерела

Через менеджера пакунків

Встановіть gitза допомогою власного менеджера пакунків. Наприклад, на Debian (або Ubuntu):

apt-get install git-core

Або на Mac OS X, через MacPorts :

sudo port install git-core+bash_completion+doc

… Або фінк:

fink install git

… Або домашня мова :

brew install git

На дистрибутивах на основі Red Hat, таких як Fedora:

yum install git

У Cygwin пакет Git можна знайти у розділі "devel"

З джерела (Mac OS X / Linux / BSD / тощо)

У Mac OS X, якщо у вас встановлені Інструменти для розробників, ви можете легко компілювати Git з джерела. Завантажте останню версію Git як .tar.bzабо .tar.gzз http://git-scm.com/ та витягніть її (двічі клацніть у Finder)

У Linux / BSD / тощо. вона повинна бути майже однаковою. Наприклад, в Debian (і Ubuntu) вам потрібно встановити build-essentialпакет черезapt .

Потім у Терміналі, cdкуди ви вилучили файли (Запуск cd ~/Downloads/git*/має працювати), а потім запустіть ..

./configure && make && sudo make install

Це встановить Git в місце за замовчуванням ( /usr/local- так gitбуде в/usr/local/bin/git )

Він запропонує вам ввести свій пароль (для sudo), це так, що він може писати в /usr/local/каталог, до якого може отримати доступ лише користувач «root», тому потрібен sudo!

Якщо ви маєте встановити його десь окремо (так що файли Git не змішуються з іншими інструментами), використовуйте --prefixкоманду configure:

./configure --prefix=/usr/local/gitpath
make
sudo make install

Це дозволить встановити gitбінарний код у /usr/local/bin/gitpath/bin/git- так що вам не доведеться вводити це кожного разу, ви повинні додавати у свій $PATHдодавання наступного рядка у свій ~/.profile:

export PATH="${PATH}:/usr/local/bin/gitpath/bin/"

Якщо у вас немає доступу до sudo, ви можете використовувати його --prefix=/Users/myusername/binта встановити у домашній каталог. Не забудьте додати ~/bin/до$PATH

Сценарій x-git-update-to-latest-version автоматизує багато цього:

Цей скрипт оновлює мій локальний клон git repo (localy at ~/work/track/git), а потім налаштовує, встановлює (at /usr/local/git- git describe) та оновлює /usr/local/gitсимпосилання.

Таким чином, я можу мати /usr/local/git/binсвоє PATHі я завжди використовую останню версію.

Остання версія цього сценарію також встановлює довідкові сторінки. Вам потрібно налаштувати ваш файл, MANPATHщоб включити його /usr/local/git/share/man.


5
На Fedora: yum install git. Для роботи графічного інтерфейсу yum install git-gui.
Крістіан Цюпіту

2
На Mac,sudo port install git-core+bash_completion+doc
Одномісний

Я завантажив fink для mac, але запущений fink install git дає мені помилку: "Не вдалося: пакет не знайдено для специфікації" git "!"
квано

@quano Вона повинна бути там, pdb.finkproject.org/pdb/package.php/git - перевірка Фінк правильно оновлюється - Я думаю , що працює fink self-updateповинно допомогти
DBR

32

Git Reset

Скажіть, ви робите потяг, об'єднуєте її у свій код і вирішите, що вам це не подобається. Використовуйте git-log або tig і знайдіть хеш, куди ви хочете повернутися (можливо, ваш останній фіксатор перед потягненням / злиттям), скопіюйте хеш, і виконайте:

# Revert to a previous commit by hash:
git-reset --hard <hash>

Замість хеша ви можете використовувати HEAD ^ як ярлик для попереднього введення.

# Revert to previous commit:
git-reset --hard HEAD^

4
Це аналог відновлення в більшості інших централізованих систем управління версіями.
Джеремі Стіна

"$ git-reset --hard HEAD ^" має бути скороченим для батьків голови (тобто попереднього стану перед останньою передачею).
Бен Пейдж

6
просто звичайний старий git resetповинен бути невдалим випадковоgit add
slf

31

Як налаштувати спільне сховище команди?

Як налаштувати звичайне сховище, описано тут - але як створити командне сховище, яке кожен може витягувати та натискати з та до?

Використання спільної файлової системи NFS

Припустимо, що ваша команда вже має, наприклад, спільне членство в групі, яке можна використовувати.

mkdir /your/share/folder/project.git
cd /your/share/folder/project.git
newgrp yourteamgroup # if necessary
git init --bare --shared

Щоб почати користуватися цим сховищем, найпростіше це зробити з локального сховища, яке ви вже використовували:

cd your/local/workspace/project
git remote add origin /your/share/folder/project.git
git push origin master

Тепер інші можуть клонувати це і починати працювати:

cd your/local/workspace
git clone /your/share/folder/project.git

Використання SSH

Налаштуйте обліковий запис користувача на цільовому сервері. Незалежно від того, чи користуєтесь ви обліковим записом без пароля, обліковим записом із паролем чи користуєтесь authorized_keysдійсно, залежить від необхідного рівня безпеки. Перегляньте сторінку Налаштування Git через SSH для отримання додаткової інформації.

Якщо всі розробники використовують один і той же обліковий запис для доступу до цього спільного сховища, вам не потрібно використовувати --sharedпараметр, як описано вище.

Після введення сховища таким же чином, як і вище, ви робите початковий натиск таким чином:

cd your/local/workspace/project
git remote add origin user@server:/path/to/project.git
git push origin master

Бачите схожість із вищезгаданим? Крім того, SSH запитує пароль, якщо в обліковому записі є пароль. Якщо ви отримаєте це підказку в обліковому записі без пароля, сервер SSH, ймовірно, відключений PermitEmptyPasswords.

Зараз клонування виглядає приблизно так:

cd your/local/workspace
git clone user@server:/path/to/project.git

крім NFS - як налаштувати git-сервер для роботи над ssh? - Наче крихітний екземпляр github.com?
Дафідд Різ

Чи потрібно встановити груповий клейкий біт у відповідних довідниках, чи git піклується про все це? Якщо останній, як git знає, яку групу використовувати для дозволів для файлів Unix?
Норман Рамзі

Я додав розділ про SSH за запитом. Клейкий біт потрібен, якщо не всі розробники мають спільну групу як свою основну групу. Якщо хтось із користувачів має іншу первинну групу, він за замовчуванням створює файли з власністю цієї групи. Це відбувається внизу git і тому не завжди знаходиться під контролем git.
Асгейр С. Нільсен

для чого корисна група git repo-config core.sharedRepository ?
systempuntoout

28

git statusтвій друг, використовуй його часто. Підходить для відповідей на такі питання:

  • Що це команда тільки зробила?
  • На якій гілці я перебуваю?
  • Які зміни я збираюся здійснити, і чи забув я щось?
  • Чи був я в середині чогось останнього разу, коли працював над цим проектом (дні, тижні чи, можливо, місяці тому)?

На відміну від, скажімо svn status, git statusпрацює майже зараз, навіть у великих проектах. Я часто вважав заспокійливим під час навчання ґіту часто використовувати його, щоб переконатися, що моя розумова модель того, що відбувається, була точною. Зараз я в основному просто використовую це, щоб нагадати собі, що я змінив з мого останнього вчинення.

Очевидно, це набагато корисніше, якщо ваш .gitignore правильно налаштований.


27

Внести зміни

Після того, як ви відредагували файл, вам потрібно здійснити зміни до git. Після виконання цієї команди він попросить повідомлення про фіксацію - це просто простий текст, який повідомляє всім, що ви змінили.

$ git commit source/main.c

Зробить файл main.c у каталозі ./source/

$ git commit -a # the -a flag pulls in all modified files

введе всі змінені файли (але не нові файли, їх потрібно додати до індексу за допомогою git-add). Якщо ви хочете ввести лише певні файли, вам потрібно спершу встановити їх за допомогою git-add, а потім зробити без прапора -a.

Здійснення зміни лише локального сховища, але не віддалених сховищ. Якщо ви хочете відправити комісії у віддалений сховище, тоді вам потрібно буде натиснути.

$ git push <remote> <branch> # push new commits to the <branch> on the <remote> repository

Для когось, хто приходить із CVS або SVN, це зміна, оскільки передача даних до центрального сховища потребує двох кроків.


27

Як ви відділення?

Викликається гілка за замовчуванням у сховищі git master.

Для створення нової гілки використовуйте

git branch <branch-name>

Щоб переглянути список усіх гілок поточного типу сховища

git branch

Якщо ви хочете перейти на іншу гілку, ви можете скористатися

git checkout <branch-name>

Створити нову гілку та перейти до неї за один крок

git checkout -b <branch-name>

Щоб видалити гілку, використовуйте

git branch -d <branch-name>

Щоб створити гілку зі змінами від поточної гілки, зробіть

git stash
git stash branch <branch-name>

11
Ви повинні згадати ярлик git checkout -b <branch-name>, який створює гілку та перемикається на неї за один крок. Це, мабуть, найпоширеніший випадок використання для початківця і навіть просунутого користувача git.
Джеремі Стіна

21

Отримання останнього коду

$ git pull <remote> <branch> # fetches the code and merges it into 
                             # your working directory
$ git fetch <remote> <branch> # fetches the code but does not merge
                              # it into your working directory

$ git pull --tag <remote> <branch> # same as above but fetch tags as well
$ git fetch --tag <remote> <branch> # you get the idea

Це в значній мірі охоплює кожен випадок отримання останньої копії коду з віддаленого сховища.



18

Git Magic - це все, що вам коли-небудь знадобиться. Гарантія або повернення ваших грошей!


14
Зітхніть, я хочу повернути свої гроші. Програмне забезпечення баггі (msysGit) з неповним навчальним посібником (GitMagic) == годин роботи, що навряд чи є безкоштовним
SamGoody

16

Як ви зливаєте гілки?

Якщо ви хочете об'єднати гілку (наприклад, masterдо release), переконайтеся, що ваша поточна гілка є цільовою гілкою, у яку ви хочете об'єднатись (використати git branchабо git statusпобачити свою поточну гілку).

Потім використовуйте

git merge master

(де masterназва гілки, яку потрібно об'єднати з поточною гілкою).

Якщо є якісь конфлікти, ви можете використовувати

git diff

щоб побачити очікувані конфлікти, які вам доведеться вирішити.


2
Існує git mergetool, який робить трійку розбіжностей з вашим улюбленим інструментом (gvimdiff, kdiff3 або деяким іншим)
Дейв Фогт

16

Я також виявив, що Git Internals є дуже корисним. Він написаний Скоттом Чейконом (автором Pro Git, керівником книги Git Community). Що мені подобається у Git Internals, це те, що він фокусується спочатку на поняттях, а потім на командах , і, маючи, що це ~ 100 невеликих сторінок, він швидко засвоюється.



12

Як відстежувати віддалені гілки

Якщо припустити, що існує віддалене сховище, з якого ви клонували своє місцеве сховище, а також припускаючи, що на цьому віддаленому сховищі є гілка під назвою 'some_branch', ось як відстежити це локально:

# list remote branches
git branch -r

# start tracking one remote branch
git branch --track some_branch origin/some_branch

# change to the branch locally
git checkout some_branch

# make changes and commit them locally
....

# push your changes to the remote repository:
git push

Здається, що в git 1.7 віддалені гілки автоматично відстежуються, коли ви робите з них локальну гілку. Я не знаю, з якої версії почалася така поведінка.
Doppelganger

Власне, ви можете перерахувати всі віддалені гілки, скориставшисьgit remote show REMOTENAME
Феліпе Сабіно


10

Як ви порівнюєте дві версії файлу або ваш поточний файл та попередню версію?

Команда порівняння є git diff.

Для порівняння 2 версій файлу:

$ git diff <commit1> <commit2> <file_name>

Це відрізняється від комісії1 від комісії2; якщо ви змінюєте порядок, тоді файли відрізняються навпаки, що може бути не таким, як ви очікуєте ...

Для порівняння поточного поетапного файлу з сховищем:

$ git diff --staged <file_name>

Щоб порівняти поточний нестандартний файл із сховищем:

$ git diff <file_name>

9

Чому ще один хауто? У мережі є справді хороші, як, наприклад, посібник з git, який ідеально починається. Він має хороші посилання, включаючи книгу git до якої можна зробити свій внесок (розміщений на git hub) і який ідеально підходить для цього колективного завдання.

На stackoverflow я дуже хотів би побачити ваші улюблені трюки!

Міна, яку я виявив лише нещодавно, git stashпояснюється тут , що дозволяє зберегти поточну роботу та перейти до іншої галузі

EDIT: як і в попередньому дописі, якщо ви дійсно віддаєте перевагу формат stackoverlow з публікаціями як wiki, я видалю цю відповідь


Ні, не видаляйте. Ваша відповідь цілком справедлива - вказувати оточуючим на хороші ресурси - це не погано. Я також хотів би найпоширеніших операцій, перерахованих тут, але це трохи роботи, і я не очікую, що це зроблять інші. Я зроблю це з часом, коли я дізнаюся, і це стане для мене орієнтиром.
Адам Девіс

9

Інтерфейс консолі - Tig

Установка:

apt-get install tig

Використання

Перебуваючи всередині git repo, наберіть 'tig', щоб переглянути інтерактивний журнал, натисніть «enter» у будь-якому журналі, щоб побачити більше інформації про нього. h для довідки, де перераховано основні функціональні можливості.

Дрібниці

"Тиг" - це "Гіт" назад.


Чи не повинен це бути "консольний інтерфейс", оскільки "консоль" та "графічний" трохи .. суперечливі?
дбр

це набагато графічніше, ніж git-log ... однак, це набагато набагато більше інтерфейсу ...
Дін Швидше

8

Як я можу створити гілку у віддаленому сховищі?

Якщо припустити, що ви клонували віддалене сховище з якогось одного віддаленого сховища.

# create a new branch locally
git branch name_of_branch
git checkout name_of_branch
# edit/add/remove files    
# ... 
# Commit your changes locally
git add fileName
git commit -m Message
# push changes and new branch to remote repository:
git push origin name_of_branch:name_of_branch

11
чому name_of_branch: name_of_branch?
Сеун Осева

Так, чому? Наскільки я знаю, вам лише потрібно, git push origin name_of_branchі відділення вже буде створено у вашому віддаленому
Феліпе Сабіно

перше name_of_branch- локальне ім'я, друге - (бажане) віддалене ім'я відділення, тож це може бути, local_name_of_branch:remote_name_of_branchякщо ви хочете, щоб імена відрізнялися. Якщо ви хочете, щоб вони були однаковими, вам все одно потрібно вказати так, як цей b / c git не припускає, що ви хочете, щоб ім’я було таким самим, якщо ви не скажете це (є й інші методи, як це зробити, проте)
johnny

8

Я розпочав роботу з офіційного підручника з Git . Я думаю, що це достатньо практично для початківців (я був і досі є початківцем, за вашим визначенням! Я ледве хапаюся за файли, я лише трохи пограв з Apache Subversion тощо).


8

Як видалити гілку з віддаленого сховища?

Виконайте поштовх у пульті, використовуючи :перед назвою філії

git push origin :mybranchname

бути originім'я вашого пульта дистанційного керування іmybranchname назва філії збирається бути видалені

http://help.github.com/remotes/


7

Натисніть і потягніть зміни

Спрощеним чином, просто зробіть git pushі git pull. Зміни об’єднуються, і якщо є конфлікт, git повідомить вас про це, і ви можете вирішити це вручну.

При першому натисканні на віддалений сховище вам потрібно зробити git push origin master(майстер є головним відділенням). Відтоді ви просто робите це git push.

Натисніть теги за допомогою git push --tags.


7

Перевірка коду

Спочатку перейдіть до порожнього режиму, використовуйте "git init", щоб зробити його сховищем, а потім клонуйте віддалений репо в свій власний.

git clone user@host.com:/dir/to/repo

Де б ви не клонували спочатку, звідки за замовчуванням потягнеться "git pull".


7
Я думаю, що клон робить ініціативним кроком для вас, щоб усунути необхідність спочатку запустити його. git init дійсно здебільшого для створення першого сховища або для спеціальних конфігурацій з декількома видаленнями, які ви хочете створити іншим, ніж стандартний клон.
Джеремі Уолл

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.