9

Eclipse や他の IDE とは異なり、Xcode は、プロジェクト内のファイルまたはグループが追加、名前変更、または削除されたことを検出すると、.xcodeproj ファイルを変更します。プロジェクトに複数の開発者が取り組んでいる場合、これは非常に不便です。

私の SCM ツールが .xcodeproj ファイルの競合を報告したら、私にできることは、プロジェクト全体の別のコピーをチェックアウトし、行ったすべての変更をそれにマージして、誰も私より「速い」人がいないことを祈ることだけです。

Xcode のデフォルト戦略を変更する回避策はありますか?

4

6 に答える 6

2

Eclipseや他のIDEとは異なり、Xcodeは、プロジェクト内のファイルまたはグループが追加、名前変更、または削除されたことを検出すると、.xcodeprojファイルを変更します。

Eclipseや他のいくつかのIDEとは異なり、Xcodeは、プロジェクトに含まれるファイルのリストと、プロジェクトの「ファイル」の一部としてのグループ構造を維持します(.xcodeprojファイルは実際にはディレクトリです)。グループは物理的にディレクトリとして存在する必要はなく、ファイルは実際にはあらゆる種類の場所にある可能性があり、Xcodeに表示される名前を付ける必要はありません。

誰かがプロジェクトに新しいファイルを追加したり、プロジェクトからファイルを削除したり、ファイルやグループの名前を変更したりした場合、他の誰かが作業コピーをチェックアウトしたり、リポジトリのクローンを作成したりするため、これをSCMに反映する必要があります。プロジェクトがディスク上のものと同期している場合は、それを好む傾向があります。したがって、たとえば、誰かがファイルを削除したが、その変更が他の人のXcodeプロジェクトファイルに反映されていない場合、更新/同期/プルなどの後にコンパイルエラーが発生します。

そうは言っても、プロジェクトファイルには、重要ではないユーザー設定の負荷も含まれています。Xcode 4.xでは、SCMで無視されるように次のディレクトリを設定しました。

foo.xcodeproj/project.xcworkspace/xcuserdata
foo.xcodeproj/xcuserdata

以前のバージョンのプロジェクトファイルでは、以下を無視するように設定していました。

foo.xcodeproj/*.pbxuser
foo.xcodeproj/*.mode1v3

これは、SCMに関する限り、不要なナンセンスを除外しているようです。

于 2012-06-06T15:25:28.180 に答える
1

私が理解していることから、.xcodeproj は実際には、.pbxuser や .pbxproj を含むいくつかのファイルのラッパーです。使用している SCM はわかりませんが、このトピックは git を使用しているユーザー向けにここで触れられており、コンセンサスは、.pbxuser ファイルと他の多くのファイルをバージョン管理下に含めるべきではないということです。

于 2012-04-19T03:41:50.950 に答える
0
  1. xcodeを終了します
  2. ターミナルを開きます。
  3. /.xcodeproj/project.xcworkspace に移動します
  4. タイプ: mv contents.xcworkspacedata contents.xcworkspacedata.bak
  5. xcodeを再起動します
于 2012-04-24T13:31:56.567 に答える
0

マージの競合を回避するための戦術: 2​​ 人のユーザーが同じ場所でファイルを変更すると、競合が発生し、手作業によるマージが必要になります。これは、たとえば、2 人のユーザーがグループの最後にファイルを追加した場合に発生します。これは、両方の変更が同じ場所にあるためです。全員が新しいファイルを別の場所 (たとえば、アルファベット順) に追加すると、マージの競合は発生しません。または少なくとも少ない。

于 2014-08-27T09:50:39.830 に答える
0

このファイルの競合を避けるためにチームで行っていることは、プロジェクト ファイルを除くすべてのファイルをコミットすることです。この場合、すべてが安全なままです。独自のプロジェクト ファイルのみが必要な場合は更新を避けることができます。また、.gitignore自動的に無視されるようにファイルに含めることもできます。

#########################
# .gitignore file for Xcode4 / OS X Source projects
#
# Version 2.0
# For latest version, see: http://stackoverflow.com/questions/49478/git-ignore-file-for-xcode-projects
#
# 2013 updates:
# - fixed the broken "save personal Schemes"
#
# NB: if you are storing "built" products, this WILL NOT WORK,
# and you should use a different .gitignore (or none at all)
# This file is for SOURCE projects, where there are many extra
# files that we want to exclude
#
#########################

#####
# OS X temporary files that should never be committed

.DS_Store
*.swp
*.lock
profile


####
# Xcode temporary files that should never be committed
#
# NB: NIB/XIB files still exist even on Storyboard projects, so we want this...

*~.nib


####
# Xcode build files -
#
# NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "DerivedData"

DerivedData/

# NB: slash on the end, so we only remove the FOLDER, not any files that were badly named "build"

build/


#####
# Xcode private settings (window sizes, bookmarks, breakpoints, custom executables, smart groups)
#
# This is complicated:
#
# SOMETIMES you need to put this file in version control.
# Apple designed it poorly - if you use "custom executables", they are
# saved in this file.
# 99% of projects do NOT use those, so they do NOT want to version control this file.
# ..but if you're in the 1%, comment out the line "*.pbxuser"

*.pbxuser
*.mode1v3
*.mode2v3
*.perspectivev3
# NB: also, whitelist the default ones, some projects need to use these
!default.pbxuser
!default.mode1v3
!default.mode2v3
!default.perspectivev3


####
# Xcode 4 - semi-personal settings
#
#
# OPTION 1: ---------------------------------
# throw away ALL personal settings (including custom schemes!
# - unless they are "shared")
#
# NB: this is exclusive with OPTION 2 below
xcuserdata

# OPTION 2: ---------------------------------
# get rid of ALL personal settings, but KEEP SOME OF THEM
# - NB: you must manually uncomment the bits you want to keep
#
# NB: this is exclusive with OPTION 1 above
#
#xcuserdata/**/*

# (requires option 2 above): Personal Schemes
#
#!xcuserdata/**/xcschemes/*

####
# XCode 4 workspaces - more detailed
#
# Workspaces are important! They are a core feature of Xcode - don't exclude them :)
#
# Workspace layout is quite spammy. For reference:
#
# /(root)/
# /(project-name).xcodeproj/
# project.pbxproj
# /project.xcworkspace/
# contents.xcworkspacedata
# /xcuserdata/
# /(your name)/xcuserdatad/
# UserInterfaceState.xcuserstate
# /xcsshareddata/
# /xcschemes/
# (shared scheme name).xcscheme
# /xcuserdata/
# /(your name)/xcuserdatad/
# (private scheme).xcscheme
# xcschememanagement.plist
#
#

####
# Xcode 4 - Deprecated classes
#
# Allegedly, if you manually "deprecate" your classes, they get moved here.
#
# We're using source-control, so this is a "feature" that we do not want!

*.moved-aside


####
# UNKNOWN: recommended by others, but I can't discover what these files are
#
# ...none. Everything is now explained.
于 2012-06-06T13:55:33.053 に答える
0

それはあなたの唯一の頼りではありません。.xcodeproj ファイルはテキストです。フォーマットは理解するのがそれほど難しくありません。競合を解決する通常の方法は、両方の追加セットを使用することです (ただし、もちろん例外もあります)。

于 2012-04-19T03:38:38.297 に答える