我是 git 的新手。所以,我很困惑,可能没有使用正确的术语。
我有两个独立的 Xcode 项目,每个项目都有自己的本地存储库。尽管项目名称相似,但每个项目都有独立且不同的源文件。我对每个项目都做了几次提交,但是当我在一个项目中提交时,提交会同时出现在两个项目中。我的新项目在 git 导航器中显示了这两个项目(这可能与问题有关)。当我进行新提交时,旧项目未在 Xcode 中打开。
每个项目都有自己的 .git 文件夹。
详细信息:
旧项目 1(“调度程序”):显示一个存储库,但我在新项目中所做的最后一次提交出现在那里。
新项目 2(“Scheduler6”):显示两个存储库,我在那里所做的最后一次提交显示在两个存储库中。
为什么项目 2 显示两个存储库,这就是我的提交最终出现在两个存储库中的原因吗?如何纠正?这以前发生过,我在旧存储库中执行了“git reset HEAD^”以删除不正确的提交。我想永远停止这种行为。 (而且我对在终端中使用 git 命令犹豫不决。)
最佳答案
谜底揭晓。我通过从项目 1 中复制大量文件创建了项目 2,但三个图像文件最终作为对项目 1 文件的引用,而不是副本。当我删除这些引用并将副本添加到项目 2 时,GIT 导航器停止显示项目 1 存储库。
总结:项目 2 显示了两个 GIT,因为项目 2 引用了项目 1 中的一些文件。
有两种方法可以解决这个问题:
一个。 手动:打开项目 2,选择每个文件(一个接一个),并检查身份和类型检查器中显示的完整路径是否为项目 2 路径。修复所有引用项目 1 的文件。
B. 使用终端:Xcode 项目控制文件是一个文本文件,因此可以使用终端命令自动检查所有完整路径,因此:
(我假设这两个项目分别命名为 Project_1 和 Project_2,并且它们的项目文件夹共享相同的父文件夹。)
复制
Project_2.xcodeproj
(实际上是一个包)。将副本的文件名后缀从
.xcodeproj
更改(我使用.xxx
)。复制的"file"变成包含四个项目的子文件夹,其中一个是文本文件(“project.pbxproj
”)。启动终端。
在终端中,执行“
cd path_to_project_2_subfolder
”。快捷方式:键入“cd
”,空格,将第 2 步中创建的文件夹拖到终端,然后按回车键。
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
的行。
我的一个文件(sharing.png)就这样出现了:
1F4E32C32343DE1A0053C239 /* sharing.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = sharing.png; path = ../../../../Project_1/sharing.png; sourceTree = ""; };
在 Xcode 中打开 Project_2 并修复在 strings 命令中显示为引用的文件。在此过程中,使用方法 A(上文)验证您的工作。
检查 GIT 导航器是否仅显示项目 2。您可能需要关闭 Xcode 并重新启动。
关于Xcode 项目显示两个 git 存储库(只有一个是正确的);提交给两者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58531499/