Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode、git和中间生成文件夹_Xcode_Git - Fatal编程技术网

Xcode、git和中间生成文件夹

Xcode、git和中间生成文件夹,xcode,git,Xcode,Git,我想要两样东西: 能够在git中更改分支,然后在Xcode中运行或构建,而无需重新编译整个项目 让git在合并期间忽略中间构建文件,这样它就不会要求我解决任何冲突 将中间版本文件夹放在项目外部,或者使用.gitignore忽略该文件夹,可以完成#2而不是#1;当我更改分支时,我必须重建整个项目,即使我没有修改任何文件。好吧,你自己正确地回答了#2,所以你的问题实际上只与#1有关。我也不明白为什么Xcode需要重新编译—git在切换分支时不会更改未更改文件的时间戳 您是否实际实现了#2解决方案,这

我想要两样东西:

  • 能够在git中更改分支,然后在Xcode中运行或构建,而无需重新编译整个项目

  • 让git在合并期间忽略中间构建文件,这样它就不会要求我解决任何冲突

  • 将中间版本文件夹放在项目外部,或者使用.gitignore忽略该文件夹,可以完成#2而不是#1;当我更改分支时,我必须重建整个项目,即使我没有修改任何文件。

    好吧,你自己正确地回答了#2,所以你的问题实际上只与#1有关。我也不明白为什么Xcode需要重新编译—git在切换分支时不会更改未更改文件的时间戳


    您是否实际实现了#2解决方案,这样整个问题就不会因为git在构建目录(应该是
    .gitignore
    'd)上跺脚而引起?

    Xcode将根据所讨论文件的时间戳来处理所有数据。如果用较新的文件替换该文件,那么Xcode应该注意到该文件的时间戳比构建产品的时间戳要新,并重新编译它

    但是,如果您使用更旧版本的源文件对其进行更改,则它无法知道生成文件不正确。它只会看到构建输出仍然比源文件更新,因此不会重新编译它


    简言之,您无法知道哪些文件确实发生了更改,哪些文件肯定没有发生更改。你最好做一次全面清理+重建,以确保;否则,当调试不起作用时,您将失去调试时间。

    您可以定义两个变量:

    • MY_BRANCH\u NAME=BRANCH\u foo
      (适用于每个分支)
    • TARGET\u TEMP\u DIR=$(CONFIGURATION\u TEMP\u DIR)/$(TARGET\u NAME)$(MY\u BRANCH\u NAME)。build
      (所有分支都相同)
    这样,不同分支的构建将被创建并保存在单独的文件夹中,不需要因为分支到分支的配置更改而重新编译所有内容


    您可以在xcconfig文件中执行此操作,或者自动将
    MY_BRANCH\u NAME
    定义为构建脚本中的xcodebuild参数,以及其他方法。

    我建议使用ccache,但谷歌建议出于某种原因,它不适用于xcode。如果这也是你的经历,也许还有另一个问题。如果我理解正确,你的xcode构建配置会随着分支的变化而变化,所以每次都会重新编译所有内容;您可能希望能够为每个分支定义不同的中间构建目录路径。这就是我所寻找的,就像你一样。快进到xcode 8.1.2,我仍然面临这个问题,即使默认情况下生成目录和/或中间目录不再位于项目目录层次结构中。文件位于默认生成/文件夹中,而.gitignore忽略生成/。(我认为大多数人都这样做。)当你在不编辑源文件的情况下构建时,git显示没有任何变化。好。我在Xcode中关闭项目,在git中更改分支,然后在Xcode中重新打开项目。构建文件不在git中,因此没有更改,这意味着它们对于当前分支是错误的构建文件,Xcode必须重建所有内容。然后我返回到第一个分支,Xcode必须再次重建所有内容。我理解为什么Xcode必须重新编译。但是如果文件没有改变(无论是内容还是时间戳),构建文件就不是“错误的”。当然,除非新分支使用不同的生成设置,否则在这种情况下,无法避免重新编译。我对Xcode不太了解,但可能是关闭并重新打开项目导致了重建吗?生成文件是错误的,因为源文件不同。更改为不同的分支会更改为不同的源文件集,但不会更改其附带的生成文件;您仍在使用旧分支中的生成文件,它们是不同的。困境是:如果git忽略构建文件,那么当您更改分支时,它们不会被切换,必须重新构建;如果git不忽略构建文件,那么它会尝试合并它们,而您也不希望这样。我知道,您实际上希望将构建文件放在存储库中,以便将它们与源文件一起签出,但避免合并和冲突?看看如何将它们标记为二进制;类似于.gittributes中的“*.o-clrf-diff”。这将阻止合并。为了防止冲突,您必须在更改到另一个分支之前提交新的生成文件,但这可能不是问题。一般来说,我认为您必须决定要么始终保持提交最新的生成文件,要么接受在更改分支时需要重新编译。并非所有人都使用默认的生成文件夹。我使用的自定义文件夹不在项目文件夹中,所以甚至不在git存储库中。