Проект XCode показывает два репозитория git (только один правильный);совершает идет в оба - PullRequest
1 голос
/ 24 октября 2019

Я новичок в Git. Итак, я запутался и не могу использовать правильную терминологию.

У меня есть два отдельных проекта Xcode, каждый со своим локальным репозиторием. Хотя проекты имеют схожие имена, каждый проект имеет отдельные и разные исходные файлы. Я сделал пару коммитов для каждого, но когда я фиксирую в одном проекте, коммит появляется в обоих. Мой новый проект показывает оба проекта в git навигаторе (что может быть связано с проблемой). Когда я сделал новый коммит, старый проект не был открыт в Xcode.

Каждый проект имеет свою собственную папку .git.

Подробности:

Старый проект 1 ("Планировщик "): показывает один репозиторий, но там отображается последний коммит, который я сделал в новом проекте.

XCode UI showing Scheduler project

Новый проект 2 (" Планировщик6 "): Показывает два репозитория, и последний коммит, который я там сделал, отображается в обоих.

XCode UI showing Scheduler and Scheduler6 projects

Почему в Project 2 отображаются оба репозитория, и чтопричина, по которой мой коммит оказался в обоих? Как это исправить? Это уже случалось раньше, и я сделал «git reset HEAD ^» в старом репозитории, чтобы удалить неверный коммит. Я хочу остановить это поведение навсегда. (И я не решаюсь дурачиться с командами git в Терминале.)

1 Ответ

1 голос
/ 15 ноября 2019

Тайна раскрыта. Я создал Project 2, скопировав множество файлов из Project 1, но три файла изображений оказались ссылками на файлы Project 1, а не копиями. Когда я удалил эти ссылки и добавил копии вместо Project 2, навигатор GIT перестал отображать репозиторий Project 1.

Сводка: Project 2 показывал оба GIT, потому что Project 2 ссылался на некоторые файлы в Project1.

Существует два способа решения проблемы:

A. Вручную : Откройте Project 2, выберите каждый файл (один за другим) и убедитесь, что полный путь, показанный в инспекторе Identity и Type, является путем Project 2. Исправьте все файлы, которые ссылаются на Проект 1.

B. Использование терминала : управляющий файл проекта XCode представляет собой текстовый файл, поэтому проверка всех полных путей может быть автоматизирована с помощью команд терминала, таким образом:

(я предполагаю, что два проекта называются Project_1 и Project_2и что их проектные папки совместно используют одну и ту же родительскую папку.)

  1. Дублировать Project_2.xcodeproj (который фактически является пакетом).

  2. Изменитьсуффикс имени дубликата из .xcodeproj (я использовал .xxx). Дублированный «файл» становится подпапкой, содержащей четыре элемента, один из которых является текстовым файлом («project.pbxproj»).

  3. Запустить терминал.

  4. В Терминале выполните «cd path_to_project_2_subfolder». Ярлык: введите «cd», пробел, перетащите папку, созданную на шаге 2, в «Терминал» и нажмите «Return».

x. (Шаг проверки.) В Терминале выполните «ls», чтобы показать четыре элемента. Они должны быть:

project.pbxproj  project.xcworkspace/  xcshareddata/  xcuserdata/
В Терминале выполните "strings project.pbxproj | grep ../Project_1/". Это показывает все строки в project.pbxproj, которые ссылаются на Project_1. | - это конвейерная команда, которая отправляет вывод strings в grep, который фильтрует строки. Поскольку два моих имени проекта отличались только одним символом, я окружил имя проекта '../' и '/', чтобы ограничить вывод каталогами и файлами, которые принадлежат Project_1, но вы можете просто использовать пустое имя проектаесли ваши два имени не похожи. Команды и аргументы чувствительны к регистру. Вы должны увидеть несколько строк, которые ссылаются на Project_1. Вы также можете открыть project.pbxproj в текстовом редакторе и искать строки, содержащие Project_1.

Один из моих файлов (shared.png) появился так:

1F4E32C32343DE1A0053C239 / * shared.png * / = {isa = PBXFileReference;lastKnownFileType = image.png;имя = совместное использование.png;путь = ../../../../Project_1/sharing.png;sourceTree = "";};

Откройте Project_2 в XCode и исправьте файлы, которые отображаются как ссылки в команде strings. Попутно используйте метод А (см. Выше) для проверки своей работы.

Убедитесь, что навигатор GIT показывает только Project 2. Возможно, вам придется закрыть Xcode и перезапустить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...