2012-02-10 14 views
3

私はインターネットを検索しましたが、この問題を解決できませんでした。 私はgitを使用しています。私はコンピュータC1上にブランチB1を持つコードを持っています。別のコンピュータC2で、私はこのブランチをクローンし、ローカルにもう1つのブランチB2を作った。 B2は中央リポジトリにプッシュされません。ファイルを無視する:gitignoreは私が望むことをしません

B1とB2は1つのファイルFILE1を除いて全く同じです。だから私はそのファイルを.gitignoreに追加し、B2でコミットしました。今私はB1でコーディングを行うたびに、中央のリポジトリにプッシュします。私はブランチB2の午前中にコンピュータのC2にこれらの変更を取得するには、私は

git pull origin B1 

を行います。しかし、これはエラーメッセージを表示します。

CONFLICT (content): Merge conflict in FILE1 

私は(FILE1を持参せず)B2にB1で行われた変更をもたらすか、どのように私は私の現在の方法を改善することができの良い方法があれば、お願いしたいと思いました。私はgitに新しいので、助けてくれてありがとう。

+1

.gitignoreはバージョン管理したくないファイルを対象としており、バージョンコントロールからファイルを削除するのではありません。理想的には、ブランチを作成してから何かがB1に変わったので、ファイル間の競合を解決したいと考えています。 – twilson

答えて

1

私はあなたが.gitignoreの目的を誤解していると思う:

gitignoreファイルが意図的にgitのは無視すべき人跡未踏のファイルを指定します。既にgitによって追跡されているファイルは影響を受けません。

ファイルが既にGitによって追跡されている場合(あなたのケースのようです)、.gitignoreに追加すると何も変更されません。

マージの競合が発生すると、現在の作業ツリーとマージ先の場所(あなたの場合はリモートリポジトリ)の両方でファイルが変更されたことを意味します。 *すべてのマージ競合を解決する必要があります。マージ競合の解決方法については、Git User Manualの中で多くのリソースがあります。

git pull -Xtheirs origin B1 

ファイルを追跡することを意図したことがない場合は、それをuntrackすることができます:あなたはまた、specify that Git use the local or remote copy to resolve conflictsでき

git rm --cached myfilename 

As Greg mentions、あなたの目的はテンプレート構成するファイルのためであれば、それに名前を付けますそれをコピーして、.gitignoreに特化したバージョンを追加してください。

4

*.oファイルのように、のファイルが非破壊のファイルを無視するために使用されます。ファイルがGitにコミットされると、.gitignoreは適用されなくなります。

問題を解決するための通常の方法は、ベースの「サンプル」ファイルを作成し、それを実際のファイルではなくリポジトリに保存することです。たとえば、foobar.configというファイルがある場合は、foobar.config.sampleファイルを適切な内容で作成し、リポジトリに配置します。また、foobar.configファイルを削除します。次に、設定ファイルが必要な各チェックアウトについて、foobar.config.samplefoobar.configにコピーし、必要に応じて編集します。

別の方法として、コードで「ローカル」設定ファイルを認識させることがあります。したがって、foobar.configという共通部分をリポジトリに配置し、コードでfoobar.config.localファイルを探し、ローカルの設定でメインfoobar.configファイルの設定を上書きします。

1

foo.txtファイルを偶然チェックインして、他の手段(あるソースのコンパイルなど)で再作成できる場合は、git rm /path/to/foo.txtを使用してバージョンコントロールから削除してから.gitignoreでも何ができますかあなたは欲しい。

関連する問題