Постановка Git: Коли ставити? Що робити, якщо після цього відбувається модифікація


9

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

Я задаюся питанням:

  • У проекті (опублікувати перший фіксатор), коли є правильний момент для постановки вихідних файлів? Прямо перед вчиненням? Відразу після додавання / видалення чи зміни?

  • Якщо файли розміщуються посередині між двома комітами, а потім змінюються, що відбувається з Git? Чи потрібно дбати про зміст вмісту, коли він був заявлений і яким він став після цього?

  • Якщо я створюю новий файл, виставляю його на екран і потім хочу його видалити, чому Git просить мене використовувати прапор "-f" і простий "git -rm file.ext" не працюватиме?

Я читав "Що означає етап" та різні інші теми посібника та інших навчальних посібників на Git, але, як я вже говорив, все ще не розумію вищезазначених питань.

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

Дякую.


1
Я створюю файли щоразу, коли закінчую якусь невелику роботу (занадто малу для виконання зобов'язань) або перед деякими змінами, про які я не впевнений. Робіть все, що працює для вас. Знайдіть інструмент (наприклад, git gui або git cola), який показує вам як етапи, так і незмінені зміни ( git diffі git diff --cachedвони хороші, але іноді я хочу більше).
maaartinus

Відповіді:


4

Призначення зони постановки - забезпечити гнучкий простір для вашого вчинку. Я думаю, що це стане зрозумілішим, якщо ви порівняєте 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 add -pце дуже приємно
Vorac

2

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

У проекті (опублікувати перший фіксатор), коли є правильний момент для постановки вихідних файлів? Прямо перед вчиненням? Відразу після додавання / видалення чи зміни?

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

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

Він покаже вам різницю між поточним станом репо та останньою фіксацією + поетапними змінами. Коли ви ставите деякі з нових змін, він просто перерахує стан (остання фіксація + поетапні зміни).

Якщо я створюю новий файл, виставляю його на екран і потім хочу його видалити, чому Git просить мене використовувати прапор "-f" і простий "git -rm file.ext" не працюватиме?

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

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