Xcode 项目显示两个 git 存储库(只有一个是正确的);提交到两个

Jef*_*eff 4 git xcode

我是 git 新手。所以,我很困惑,可能没有使用正确的术语。

我有两个独立的 Xcode 项目,每个项目都有自己的本地存储库。尽管这些项目具有相似的名称,但每个项目都有单独且不同的源文件。我已经对每个项目进行了几次提交,但是当我在一个项目中提交时,该提交会同时显示在两个项目中。我的新项目在 git 导航器中显示了两个项目(这可能与问题有关)。当我进行新的提交时,旧项目未在 Xcode 中打开。

每个项目都有自己的 .git 文件夹。

细节:

旧项目 1(“调度程序”):显示一个存储库,但我在新项目中所做的最后一次提交出现在那里。

显示 Scheduler 项目的 XCode UI

新项目 2(“Scheduler6”):显示两个存储库,我在那里所做的最后一次提交都显示在这两个存储库中。

显示 Scheduler 和 Scheduler6 项目的 XCode UI

为什么项目 2 显示两个存储库,这就是我的提交最终出现在两个存储库中的原因吗?如何纠正?这种情况以前发生过,我在旧存储库中执行了“git reset HEAD^”以删除不正确的提交。我想永远停止这种行为。(我对于在终端中使用 git 命令犹豫不决。)

Jef*_*eff 9

谜团已揭开。我通过从项目 1 复制大量文件来创建项目 2,但三个图像文件最终成为对项目 1 文件的引用,而不是副本。当我删除这些引用并将副本添加到项目 2 时,GIT 导航器停止显示项目 1 存储库。

摘要:项目 2 显示了两个 GIT,因为项目 2 引用了项目 1 中的一些文件。

有两种方法可以解决这个问题:

A. 手动:打开项目 2,选择每个文件(逐个),然后检查身份和类型检查器中显示的完整路径是否为项目 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 中创建的文件夹拖到终端,然后按回车键。

X。(验证步骤。) 在终端中,执行“ ls”以显示四个项目。他们应该是:

project.pbxproj  project.xcworkspace/  xcshareddata/  xcuserdata/
Run Code Online (Sandbox Code Playgroud)
  1. 在终端中,执行“ strings project.pbxproj | grep ../Project_1/”。这显示了project.pbxproj中引用Project_1的所有行。' |' 是一个管道命令,它将输出发送stringsgrep过滤字符串。由于我的两个项目名称仅相差一个字符,因此我用“ ../”和“ /”将项目名称括起来,以将输出限制为属于 Project_1 的目录和文件,但如果您的两个名称不匹配,则可以只使用裸项目名称。 -相似的。命令和参数区分大小写。您应该看到一些引用 Project_1 的行。您还可以project.pbxproj在文本编辑器中打开并搜索包含Project_1.

我的文件之一(sharing.png)如下所示:

1F4E32C32343DE1A0053C239 /* 共享.png */ = {isa = PBXFileReference; 最后已知的文件类型 = image.png; 名称=共享.png;路径=../../../../Project_1/sharing.png; 源树=“”;};

  1. 在 Xcode 中打开 Project_2 并修复在 strings 命令中显示为引用的文件。在此过程中,使用方法 A(上面)来验证您的工作。

  2. 检查 GIT 导航器是否仅显示项目 2。您可能必须关闭 Xcode 并重新启动。