Робота з Git на декількох машинах


15

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

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

Моя інтуїція говорить, що взагалі всі йдуть з першим варіантом. Але недоліком, який я бачу, є те, що ви не завжди зможете отримати доступ до коду з інших своїх машин, і я, звичайно, не хочу штовхати всі мої гілки WIP до github наприкінці кожного дня. Мені також не хочеться постійно залишати свої комп’ютери, щоб я міг їх безпосередньо отримувати. Нарешті, важливим моментом є те, що всі команди git для оновлення декількох гілок можуть стати втомливими.

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


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

2
@ user827992 Я цілком на 100% усвідомлюю цей факт. Я не думаю, що я щось пропонував щодо централізації. Єдине, про що я мав на увазі, якщо ви використовуєте файл спільного використання файлів, одна машина - це хост, в тому сенсі, що він фізично зберігає файли. Це концепція, окрім dvcs.
Тессерекс

ця тема stackoverflow.com/questions/1550378/… містить кілька хороших думок. Здійснення, натискання, витягування, скидання та видалення гілки є одним із них (можливо, автоматизованим)
phil294

Відповіді:


14

Я щодня розглядаю обидва запропоновані вами рішення. Існує дві ключові концепції для їх поводження.

  1. Використовуйте тематичні гілки. Я вважаю, історія виробництва повинна бути первозданною. Як результат, я витрачаю багато часу, роблячи productionісторію своєї філії логічною, повторюваною та налагоджуваною. Однак, використовуючи декілька машин, вам періодично потрібно вчиняти незавершені роботи. Використовуйте галузь теми. Ви можете pullі pushце відділення з обох машин з невеликим зусиллям, і коли він буде готовий об'єднатись у нього masterабо production відновити його, щоб створити більш ремонтовану історію.
  2. Використання однієї репо-файлу, що ділиться в мережі, є чудовим, якщо ви також не ділитесь ними з іншими користувачами. Ми використовуємо спільний сховище для сценаріїв, творчо названий scriptsсховищем. Спочатку здавалося, що це гарна ідея, оскільки репо не змінюється часто, але з часом воно стає цілком кошмаром. Легко перезаписати роботу один одного, і ви закінчите витрачати стільки часу на повітряний рух, контролюючи, хто розгортає сховище, як ви працюєте в ньому.

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

Якщо ви виявите, що працюєте над більш ніж однією темою гілки протягом дня, але не хочете натискати кожну окремо на віддалений, git push <remote>за замовчуванням натисніть всі відповідні гілки на <remote>. Цей параметр за замовчуванням зміниться в пізнішій версії git , але його можна буде замінити, встановивши push.defaultу конфігураційному файлі або вказавши відповідність refspec:

git push <remote> :

3

Якщо не всі машини весь час спрацьовують, срібної кулі немає: перед тим, як вимкнути машину, ви повинні натиснути зміни кудись ще. Я натискаю на приватний сервер, але це може бути так само, як Dropbox або usb-ключ, який ви носите скрізь.

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


2

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

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

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

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

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


0

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

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

Існує середина, яка має голий сховище на мережевому диску, а також окремі користувачі можуть зайти та вийти з нього. Це відокремлює вашу роботу WIP (що так, ви зберігаєте локально) від роботи, яку ви публікуєте, до сховища. Це не "заощадити" - це "опублікувати". Робота, яку ви хочете, щоб ваші колеги бачили та використовували.

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