2

私はgitの問題を抱えています。答えはstackoverflowのどこかにあるはずですが、見つかりません。

sass やその他のビルド ファイルを使用するプロジェクトに取り組んでいるチームを想像してみてください。複数の開発者がファイルをビルドし、非開発者が最初にビルドする必要なくプロジェクトを複製してチェックアウトしたい場合に備えて、ビルドされたファイルをバージョン管理する必要があります。

ただし、ビルドされたファイルをプロジェクトに含めると、常にマージの競合が発生します。

ローカルの変更を無視して、主任開発者だけが時々バージョンをチェックインできるようにすることができます。

無視は、ユーザー定義の .gitignore ファイルまたは次の方法で実行できます。

$ git update-index --assume-unchanged path-to-file.css

しかし、これは引っ張るときに問題を引き起こします。

$ git pull

remote: Counting objects: 30, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 16 (delta 11), reused 16 (delta 11)
Unpacking objects: 100% (16/16), done.
From github.com:User/MyProject
   4e1s389..a231344  development -> origin/master
Updating 63sdf04..a231344
error: Your local changes to 'path-to-file.css' would be overwritten by merge.  
Aborting.
Please, commit your changes or stash them before you can merge.

回避策は、たとえばエイリアスを使用して、ファイルを常にチェックアウトすることです。

git config --global alias.cobuilded 'checkout path-to-file.css'

そして、いくつかの作業と構築の後:

git cobuilded
git commit -am "work done"
git pull
git push

しかし、この問題にはもっと簡単な解決策があるはずですよね?

git ignore-this-file-and-always-merge-theirs-from-origin path-to-file.css

私はすでにこの質問と、常にそれらをマージするための可能な解決策を見つけました。しかし、私の場合、マージ前のプルはすでに失敗しています...

4

1 に答える 1

1

通常、従うのが良い哲学です: 生成されたファイルをチェックインしないでください。

代わりに、リリース エリアを提供するか、より一般的に言えば、顧客 (消費チーム) を満足させるリリース メカニズムを提供します。

一般的に言えば、バージョン管理システムではなく、展開システムを探しています。ただし、2 つを組み合わせることができます。git はデプロイメント システムではありません。確かにそれは長い道のりを歩むことができますが、その方向への拡張がいくつかあります.

1 つのアプローチは、特定のブランチでコミット (またはプッシュ) が発生するたびにトリガーされる自動ビルド システムを使用することです。「継続的インテグレーション」ツール用のオープン ソース ツールが利用可能です。Git は、repo: へのプッシュなどのアクションをトリガーするフックを提供します$GIT_DIR/hooks/post-receiveこれは、リリースをファイルシステム領域にエクスポートするように変更できる電子メールを自動的に送信するための優れた例です。その後、その領域でビルド プロセスをトリガーできます。

または、既存のビルド プロセスを変更して、最終的なビルド ターゲットを含めることもできます。これは、ビルド ディレクトリのコピーをリリース領域にエクスポートします。テストに合格した場合にのみ、ターゲットを手動でトリガーする必要があります。

プロジェクトには、リリースが発生したときにリリース領域にコピーされるすべてのファイル (相対パスを含む) をリストする「部品表」(「release.bom」など) と呼ばれるバージョン管理されたファイルを含めることができます。そうすれば、誰も興味のないオブジェクトや一時ファイルでリリース領域を誤って混乱させることを避けることができます。

他のチームによる内部使用のみの場合は、単純なrsync、オプションで--exclude-from=FILEオプションと git 制御下の除外構成ファイルで十分です。「rsync フィルター ルール」を検索して、その構文に関する詳細情報を入手してください。

于 2015-12-18T08:21:46.887 に答える