在我的 iOs 应用程序中,我使用的是谷歌的静态库。我从他们的 git 存储库中提取了源代码,并将该项目链接为我的应用程序的子项目。
我需要更改有关跳过安装的库项目设置上的一些构建标志和设置。但是现在整个项目都不会提交,因为我无法提交库项目文件。我想保持图书馆连接到他们的存储库,以便能够获得新的更新。
当然我可以取消选中复选框标记,但是还有其他解决方案吗?
您需要分叉 lib 项目并将其添加为子模块,因此您可以对 lib 进行更改,并从原始 repo 添加上游,您可以从中获取更改并保持 lib 更新。这里是关于fork a repo的 github 帮助页面,这里是关于子模块的文章
之后,您按照 github 页面中的说明分叉了 lib,这很容易......
如果您的项目是一个 git 项目,请在您的 git 项目根目录的 shell 中添加一个子模块
// git submodule add git://forkPath.git destinationFolder
// like this
git submodule add git://github.com/chneukirchen/rack.git rack
现在你需要初始化和更新你的项目子模块,就像这样
git submodule init
git submodule update
如果您的项目是 SVN 项目或类似的项目,请将 fork 克隆到项目根目录之外的某个位置(可能在同一级别):
// git clone git://forkPath.git
git clone git://github.com/chneukirchen/rack.git
现在您只需要将分叉项目链接到您的项目,导入类等...
更新一个叉子:
从子模块项目文件夹...
输入子模块的根目录,您将进入不同的 git 存储库,以添加作为原始存储库的远程上游:
// git remote add upstream https://originalRepo.git
git remote add upstream https://github.com/octocat/Spoon-Knife.git
现在您必须从上游提取更改并合并更改
git fetch upstream
git merge upstream/master
现在让您可以进行所有您想要的更改并提交
git commit fileToCommit.m -m 'a comment'
并推送到 fork 项目
git push
或者如果您在特定的分支机构工作
git push origin/master
构建脚本可能会帮助您:
保持当前谷歌图书馆项目的位置不变
编写一个脚本,让 git 更新该文件夹,并在每次构建时运行。使用带有日期的“标志”文件,可以编写脚本以每天仅真正更新一次文件夹
为项目文件以外的每个导入文件编写另一个脚本,将其复制到第二个文件夹
将您要使用的项目文件放在第二个文件夹中
删除对主库文件夹的原始引用,然后导入新的第二个文件夹。
瞧,现在您已经更新了源文件和修改后的项目文件。如果由于添加了新文件而导致构建中断,则可以将修改后的原始文件复制到第二个文件夹,根据需要更改设置。
为了跟踪更改,您可以使用 git 子模块,甚至更好 - Cocoapods(如果可能)。此外,您可以使用 XCode 工作空间并将库作为工作空间内的“并行”项目保留,而不是使其成为子项目 - 这在我的情况下使事情变得更简单。