Що ви, мабуть, зробили для цього:
Такі речі трапляються, коли ви хочете вирвати трохи програми. Ви збираєтесь змінити щось, що вже працювало, тому ви додали свій заклинання тривалої непереборності 3 рівня:
machine1:~/proj1> git init
і ви починаєте додавати / здійснювати. Але потім проект починає активізуватися, і ви хочете працювати над ним на іншому комп’ютері (наприклад, на домашньому ПК або ноутбуці), тож ви робите щось на зразок
machine2:~> git clone ssh://machine1/~/proj1
і він клонується, і все виглядає добре, і тому ви працюєте над своїм кодом з машини2.
Тоді ... ви намагаєтеся відсунути свої зобов'язання від machine2, і ви отримаєте попереджувальне повідомлення в заголовку.
Причина цього повідомлення полягає в тому, що git repo, з якого ви витягли, було начебто призначене для використання саме для цієї папки на машині1. Ви можете клонувати з нього просто чудово, але натискання може спричинити проблеми. "Правильний" спосіб управління кодом у двох різних місцях - це "голе" репо, як було запропоновано. Гола репо не розроблена для того, щоб виконувати будь-яку роботу в ній, вона покликана координувати комісії з різних джерел. Ось чому найвища відповідь пропонує видалити всі файли / папки, крім папки .git після вас git config --bool core.bare true
.
Уточнення найкращої відповіді: Багато коментарів до цієї відповіді говорять про щось на кшталт "Я не видалив не-.git файли з машини1, і я все ще зміг зробити з машини2". Це вірно. Однак ці файли повністю "розлучені" з git repo. Спробуйте спробувати git status
там, і вам слід побачити щось на кшталт "фатально: цю операцію потрібно запустити в робочому дереві". Отже, пропозиція видалити файли не є такою, що фіксація з machine2 буде працювати ; це так, що ви не заплутаєтесь і не думаєте, що git все ще відстежує ці файли. Але видалення файлів є проблемою, якщо ви все ще хочете працювати над файлами на machine1, чи не так?
Отже, що ви насправді повинні робити?
Залежить від того, скільки ви плануєте продовжувати працювати на machine1 та machine2 ...
Якщо ви закінчили розробку з machine1 і перенесли всю свою розробку на machine2 ... просто зробіть те, що пропонує найкраща відповідь: git config --bool core.bare true
а потім, при необхідності, видаліть усі файли / папки, крім .git, із цієї папки, оскільки вони Ви не будете відслідковуватися і, ймовірно, можуть викликати плутанину.
Якщо ваша робота над машиною2 була лише разовою справою, і вам не потрібно продовжувати там розробляти ... тоді не поспішайте робити оголене репо; просто ftp / rsync / scp / тощо. ваші файли з машини * 2 * поверх файлів на машині * 1 *, виконайте / натисніть з машини * 1 *, а потім видаліть файли з машини * 2 *. Інші пропонують створити філію, але я думаю, це трохи безладно, якщо ви просто хочете одноразово об'єднати якусь розробку з іншої машини.
Якщо вам потрібно продовжувати розробку як на машині1, так і на машині2 ..., тоді вам потрібно налаштувати все належним чином. Вам потрібно перетворити репо в голий, тоді вам потрібно зробити клон цього на machine1, щоб ви могли працювати . Мабуть, найшвидший спосіб це зробити - це зробити
machine1:~/proj1> git config --bool core.bare true
machine1:~/proj1> mv .git/ ../proj1.git
machine1:~/proj1> cd ..
machine1:~> rm -rf proj1
machine1:~> git clone proj1.git
machine1:~> cd proj1
Дуже важливо: оскільки ви перемістили розташування репо з proj1 в proj1.git, вам потрібно оновити це у файлі .git / config на machine2 . Після цього ви можете здійснити свої зміни з машини2. Нарешті, я намагаюся тримати мої голі репозиції в центральному місці, подалі від моїх робочих дерев (тобто не ставте 'proj1.git' у ту саму батьківську папку, що і 'proj1'). Раджу зробити так само, але я хотів, щоб кроки вище були максимально простими.