プロジェクトのデータベース。Gitコミットする。プルプッシュ & more

Deeplからの自動翻訳

前回のブログでは、Git(バージョン管理システム)とGithub(クラウドベースのホスティングサービス)、そして4Dコードを他の開発者と共有する方法について紹介しました。このブログ記事では、リモートリポジトリのクローン、コミット済みのファイルの無視、マージの競合の解決など、開発者が遭遇する可能性のあるシナリオについてもう少し踏み込んで説明します。

前提条件

この先に進む前に、プロジェクトのデータベースを作成したりバイナリデータベースをプロジェクトに変換したりする方法を知っていることを前提とします。Gitをマシンにインストールし、Githubにアカウントを持つことは必須です。もしまだ持っていない場合は、この ブログの記事を参考に進めてください。

リモートリポジトリをクローンする

アプリケーションの作業を再開するときがやってきました。しかし、何らかの理由で、前回作業したプロジェクトがあなたのマシンにありません。どうすればいいのでしょう?

GitHub でリポジトリを作成したので(前回のブログ記事)、それはリモートリポジトリとして存在します。今度は、私たちのマシンにローカルコピーを作成し、2つの場所間で同期をとる必要があります。どのように進めるか?

  1. Githubのアカウントに接続します。
  2. リポジトリのメインページに移動します。
  3. Clone or download」ボタンをクリックし、クリップボードのアイコン(下の画像のように)をクリックします。
  4. ターミナルを開き、ディレクトリをクローンする場所を指定します。
  5. git cloneと入力し、手順 3 でコピーした URL を貼り付けます。

blank

おめでとうございます。これで、あなたのマシンにローカルコピーが作成されました。

gitignore

特定のファイルやフォルダを git に追跡させたくない

プロジェクトの中に、追跡されたくないファイルやディレクトリがあることがあります。そこで、.gitignoreファイルが役に立ちます。その名のとおり、Git にリポジトリから無視すべきファイルやディレクトリ、パターンを指示します。

この例では、Dataフォルダ(journalpreferences.4ddDerivedDataフォルダを含む)を無視するように指示します。

  • .gitignore の作成

blank

  • 無視するファイルやフォルダの設定

blank

.gitignoreは、ファイル名の比較にグロビングパターンを使用します。さまざまなシンボルを使ってパターンを作成することができます。たとえばフォルダを無視するには、フォルダ名の末尾にスラッシュをつけます。.gitignore のパターンについては、こちらの記事を参照ください。

すでにリポジトリにコミットされているファイルを無視する

新しいリポジトリを作成するときには、無視したいファイルパターンについても.gitignoreファイルを作成する必要があることに注意しましょう。しかし、後になって無視したいファイルが紛れ込んでしまうこともあります。

慌てないでください。いくつかの簡単なステップで、リポジトリをクリーンアップし、これらのアイテムを無視するようにすることができます。

  1. 削除するファイルをステージし、ローカルに残す: git rm -r –cached
  2. 作業ディレクトリ全体を検査して、新しいファイルや削除されたファイル、変更されたファイルを探し、インデックスに追加します: git add
  3. ステージングエリアにあるファイルをローカルリポジトリに送ります: git commit -m “Clean up ignored files”
  4. 変更をリモートリポジトリに送信します:git push

ほら!リモートリポジトリで、ファイルが存在しないことを確認できます!

重要な注意:無視されたファイルはリポジトリの履歴に残ります。このため、新しいリポジトリを作成する際には、無視したいファイルやフォルダー、パターンをすべて示す.gitignoreファイルも作成しなければなりません。そうしないと、特定のファイルを履歴に残したくない場合、Github からリポジトリを削除して再度プッシュする必要があります。

マージのコンフリクトを解決する方法

まず第一に、冷静になりましょう。

複数の開発者が同じバージョン管理システムで作業している場合、最終的なコンフリクトを管理することは日常茶飯事です。いくつかのオプションがあります。コンフリクトは4Dエディターを使って簡単に解決できますが、すべてのファイルがテキストベースになったので、テキストエディターを使ってコンフリクトを手動で解決することもできます。さらに、GITに統合可能な多くのマージツールがあります。以下の例では、4Dエディタを使ってコンフリクトを解消しています。

4Dメソッドを使ってコンフリクトを見てみましょう。これを行うには、データベースフォルダを複製して少なくともひとつのプロジェクトメソッドを持つようにして、セカンダリユーザー/ローカルgitリポジトリをシミュレートする必要があります。これで、my4DApplicationと my4DApplication2という2つのデータベースフォルダができました。次に、両方のアプリケーションを開いてください。

    1. 最初のアプリケーションでプロジェクトメソッドを開き、何らかのコンテンツ(例えばコメント)を追加します。blank
    2. git statusを実行すると、メソッドの変更が検出されます。新しい変更をコミットしてプッシュします。
    3. シナリオ: 他の誰かが同じメソッドを、同時に変更する .2 番目のアプリケーションで同じメソッドを開き、別のコメントでそれを変更することでシミュレーションしてみましょう。blank
    4. 新しい変更をコミットしてプッシュします。ご覧のとおり、プッシュは拒否され、代わりにプルが提案されます。blank
    5. 提案されたgit pullを実行しても、何の役にも立ちません。

blank

さてどうする?

コンフリクトが発生しているメソッドを開いてみましょう。Headの行がローカルでの変更、そして赤の行が相手側のユーザーが行ったコミットの番号を表します。

blank

コンフリクトを解決するのは簡単で、コードの正しい部分を選択して変更をプッシュするだけです。この場合、ALERT のメッセージは両方とも別のコメントで残しています。

blank

これが完了したら、もう一方のユーザーは git pull を実行して新しい変更を取得することができます。これで、どちらのユーザーもメソッドの内容を同じにすることができました。

blank

そもそも衝突を避けるために

常にコンフリクトを回避できる確実な方法はありませんが、git fetchを実行すればマージの手間を省くことができます。これは、リモートリポジトリに新しいコミットがあるかどうかをチェックするものです。プッシュする前にこれを行わなかったために、[Rejected] というエラーが発生したのです。

おわりに

この記事では、開発者が Git を使っているときに遭遇しそうなさまざまなシナリオについて説明しました。次回の記事では、コマンドラインから離れ、GUI クライアントを使用して Git を操作する方法を紹介します。

Avatar
Intissarは、プロダクトマーケティングマネージャーとして2017年に4Dに入社しました。彼女は、プロダクト、マーケティング、エンジニアリング、およびテクニカルサポートチームと密接に連携し、さまざまな顧客に対して新機能の「理由」、「方法」、「内容」をアピールするために働いています。この密接な連携により、メッセージングフレームワークを作成し、4Dブログやウェブサイトのための詳細なコンテンツやコードサンプルを書き上げることができるのです。VINCI大学でコンピュータサイエンスのエンジニアの学位を取得後、彼女はソフトウェアエンジニアとしていくつかのスタートアップ企業で働きました。ソフトウェアの仕様、設計、開発、ユーザートレーニング、サポート、チームマネジメントなどの実務経験を持ちます。