Призначення зони постановки - забезпечити гнучкий простір для вашого вчинку. Я думаю, що це стане зрозумілішим, якщо ви порівняєте git з централізованими системами управління версіями, такими як субверсія.
Підрив
У підривному режимі ви можете вибрати певні файли вашої робочої копії. Але лише цілі файли. Тепер: Що робити, якщо ви хочете встановити файл A
, а не файл B
, а частини файлу, C
які відносяться до файлу, A
але не ті частини, які залежать від змін у файлі B
(з тих пір у вас виникнуть проблеми з послідовністю фіксації).
Git
Git вирішує це, надаючи постановку як другу робочу копію. У межах постановочної програми ви збираєте знімок, який ви зробите (грубо кажучи).
Тому в області постановки ви можете створити знімок, який включає зміни A
та версію файлу, C
яка відображає лише зміни в A
.
Для конкретних питань
Ви можете поставити в будь-який момент. я особисто віддаю перевагу перед початком фіксації.
Зміна змін у файлі, які інсценізуються, а потім зміна цього файлу в робочій копії, ви, звичайно, не змінили поетапний файл. Ви можете або вирішити, чи слід також проводити такі зміни, чи ні, щоб не проводити зміни. Тобто, якщо ви запустите, git gui citool
ви побачите різницю поетапних та нестандартних версій (приємні та прості інструменти для лінійної інсценування та виконання).
Тут Гіт обережний, що, мабуть, добре.
Загальна стратегія фіксації: Гранульовані коміти
Думаю, коли говорити про запитання "Коли я повинен робити етап", слід також говорити про звички вчиняти.
Централізований VCS
У централізованих системах управління версіями, де ви приймаєте на себе центральний сервер, для ваших колег було важливо, щоб ваші зобов'язання були повною та перевіреною. Тож люди намагатимуться робити не так часто, а потім здійснюють стан повних файлів, щоб мінімізувати можливість помилки. Таким чином, коміти, як правило, є досить великими фрагментами, які включають багато змін (якщо вони не є простими виправленнями). Зміни комісії можуть бути абсолютно не пов'язаними.
Git
У Git фіксація виконується локально, лише виштовхування їх на сервер робить їх загальнодоступними. Тому фіксація є дешевою в певному сенсі. Здійснення в підривному сенсі порівняння порівняно з кількома, git commit
за якими слідує git push
. Ця різниця має значення.
Git дозволяє вводити окремі рядки коду, навіть якщо ви також змінили інші рядки в тому ж файлі. Це дає багато переваг, оскільки ви можете, наприклад, здійснити помилку безпеки у рядку 100, змінивши рядки 300-350, запровадивши нову функцію.
- Ви можете розділити різні зміни в різних комісіях. Це добре розділяє їх в історії вашої версії і навіть дозволяє повернути одну, а не іншу.
- Ваша комісія не обов'язково повинна відображати стан "складання" вашої робочої копії (хоча я намагаюся зберегти це таким чином).
Тож де "контроль якості" та гарантія складання зобов'язань, яких очікує користувач-підривник? Він переміщується на інші дії в git. Ви все ще хочете витіснити функціональний стан програми в загальнодоступному сховищі. Тому ви впевнені, що тести успішні, і програма працює, перш ніж витісняти ваші зміни.
Також спробуйте використовувати гілки до максимуму. Здійснюючи багато невеликих змін, ви отримаєте досить велику історію версій. Якщо ви працюєте у філіях, ви можете класифікувати ці деталізовані комітети за назвою гілки та потім об'єднати їх назад (опція --no-ff
також збереже, що ці функції жили в унікальній гілці).
Тобто ви можете зберегти звичку зливатися лише з master
гілкою, якщо галузь у справному стані. Ви також можете використовувати теги для відстеження етапів та випусків.
Тепер, щоб повернутися до інсценізації: Після того, як ви вкажете кілька рядків на комісію, ви будете поетапно безпосередньо перед тим, як зробити. (Принаймні так я це роблю).
git diff
іgit diff --cached
вони хороші, але іноді я хочу більше).