19

リポジトリを作成して、自分のプロジェクトにGitHub/BitBucketをうまく使用できます。他の開発者と共同作業したり、GitHubでプロジェクトをフォークしようとしたりするときに問題が発生しました。

オープンソースプロジェクトでのgitリポジトリのベストプラクティスのような他の答えを知っていますが、解決方法を知りたいOSX/Xcode固有の問題があります。

  1. .DS_Storeファイルは面倒な場合があります。.gitignoreを使用して防止できますが、それらがすでに含まれている場合、または別の開発者が不器用なgitコマンドを使用してそれらを追加し直した場合はどうなりますか?

  2. .xcodeprojは、他の人のディレクトリ名と開発者プロファイルに変更が加えられますマージを実行したり、競合を回避したりするための最良の方法は何ですか?

  3. githubプロジェクトからフォークまたはプルした場合、これらの問題をクリーンアップし、メンテナのマージの競合を最小限に抑えるにはどうすればよいですか?

Xcode用に作成された.gitignoreの例、またはリポジトリを初期化するために使用するスクリプトがある場合、それは素晴らしいことです。

4

6 に答える 6

15
  1. 入れ.DS_Store.gitignore。次に、まだ行っていない場合は.gitignore、リポジトリに追加します。(無視しないでください.gitignore。)これで、すべての開発者が.DS_Storeファイルを無視します。を入力する前に誤ってリポジトリに追加されたものがある場合は.DS_Store.gitignore(コミットで)削除できるようになり、削除されないようにする必要があります。

  2. xcodeprojディレクトリです。このディレクトリでリポジトリに存在する必要がある唯一のファイルはproject.pbxprojファイルです。私は通常、これらの行を自分の.gitignore:に入れることによって、他のすべてを無視します。

    *.xcuserstate
    project.xcworkspace/
    xcuserdata/
    

    ビルド設定に絶対パスを設定することは避けてください。相対パスを使用します。

    iPhone DeveloperXcodeがローカル開発者のプロファイルを自動的に選択するように、デバッグビルドとリリースビルドはコード署名IDとして使用する必要があります。(配布用の)IPAを作成する場合、Xcodeは別のIDで再署名することを提案します。その時点で、必要に応じて配布プロファイルを選択できます。

  3. これらの間違いを犯したgithubのプロジェクトを使用しようとしている場合は、メンテナに修正を依頼するか.DS_Store、同じコミットでファイルとコード署名IDに触れないようにすることができます。アップストリームに送信したい。

于 2012-10-16T20:52:57.287 に答える
5

.xcodeprojとマージの競合に関する2番目の問題。

ファイルを使用して.gitattributes、すべての.pbxprojファイルのマージの競合を戦略を使用して処理する必要があることを指定します。つまりmerge=union、Gitは、競合の両側からの変更をマージし、アップストリームの変更を最初に取得することを認識している必要があります。

この記事では、もう少し詳しく説明します

于 2013-09-18T14:30:54.270 に答える
4

git filter-branchは、リポジトリから不要なファイル(.DS_Storeファイル)を削除するのに役立つ場合があります。たとえば、https ://help.github.com/articles/remove-sensitive-dataを参照してください。

不器用なgitcommitでファイルが追加された場合は、修正されたチェンジセットをクリーンなリポジトリで再生できるはずです。

于 2012-10-10T12:08:30.383 に答える
4

私は一つずつ試してみます:

I.git filter-branch履歴からファイルを完全に削除する必要がある場合にのみ使用する必要があります。これらのファイルにクレジットカード情報が含まれていない場合は、次の情報で十分だと思います。

git rm --cached .DS_Store
git commit -m "{Your message}" 

次に、このファイルをに追加し.gitignoreてコミットします。

これにより、リポジトリからのファイルの削除がコミットされますが、ファイルは作業ディレクトリに保持されます。ただし、プッシュしてから他の誰かがこのコミットをプルすると、ファイルが削除される可能性があるため、これを通知する必要があります。コミット.gitignoreすることにより、他の開発者がこのファイルを再度追加するのを防ぐことができます。あなたがメンテナでないなら、私はあなたが何もすべきではないと思いますが、この問題をメンテナに伝えてください。

II。私は、あらゆる性質の隠しファイルは、ほとんどの場合、まさにその理由でリポジトリに入れられるべきではないと強く信じています。したがって、 .xcodeprojでも.DS_Storeと同じことを行い、それを挿入.gitignoreしてコミットする必要があると思います。.gitignore上記のルールの例外です。

III。これらのファイルが適切に無視されれば、将来的に問題は発生しません。彼らがすでにリポジトリにいて、誰かがそのようなクリーンアップをしたい場合、それはメンテナによって行われ、チーム内で伝達されるべきです。

お役に立てば幸いです。

于 2012-10-16T20:33:39.463 に答える
2

.DS_Storeがすでに追加されている場合、.gitignoreはあまり役に立ちませんが、これはあなたや他の人にとってはまだ良いリソースだと思います。

プロジェクトを開始するとき、私は通常、このリストを見て、適切な.gitignoreがすでに存在するかどうかを確認します。具体的には、これはObjective-C.gitignoreです。

うまくいけば、それらのリソースがある程度役立つでしょう。

于 2012-10-15T03:44:55.063 に答える
1

Macユーザーとして、GitFlowをサポートするSourceTreeのようなツールをダウンロードする必要があります。Git Flowは、共同作業者がリポジトリにコードをコミットする方法に関するいくつかのベストプラクティスを確立するのに役立ち、少なくともマージの競合の頻度を減らし、管理しやすくします。さまざまなプロジェクトタイプのgitignoreファイルのセットについては、GitHubにアクセスして、すぐに使用できるファイルをダウンロードできます。Xcodeの場合、 Objective-C.gitignoreとしてリストされています。それは良い出発点であり、Cocoapodsもカバーしています。外部ライブラリを使用している場合は、プロジェクトでCocoaPodsを使用して、そのコードを分離してリポジトリの外部に保持し、gitサブモジュールを回避できるようにする必要があります。

これで、ファイルが.DS_Storeのようにリポジトリに追加されたことがわかったら、それを削除して次に進みます。プロジェクトにチェックインされている.gitignoreファイルに必ず追加してください。

xcodeprojに関しては、上記のgitignoreがそれを除外するため、ユーザー固有のファイル内のカスタマイズはそれほど多くないはずです。スキームを共有する場合は、[スキームの管理]で[共有]をオンにして、そのサブディレクトリ内のファイルをチェックインしてください。証明書の自動選択を使用する必要があるため、実際に選択できるのは開発者または配布のみです。また、完全なパスのハードコーディングを回避するXcode内で提供される変数を利用する必要があります。例を考えようとすると、Plistが思い浮かびました。この場合、あなたはを書いたかもしれませんが/Users/me/MyProject/Resources/MyProject.plist、代わりにを使用する必要があります$(SRCROOT)/resources/MyProject.plist

于 2012-10-21T19:54:03.667 に答える