5

これが私の問題です(例のステップを介して):

  • 2つの異なるブランチ(branchAとbranchB)を持つGitリポジトリがありますが、これらは現在同じです。
  • branchBにチェックアウトし、新しいファイル「foo.txt」を作成します。
  • そのファイルをそのブランチの「.gitignore」に追加して、branchBで正常に無視されるようにします。
  • 別のファイル「hello.txt」を作成し、ステージングしてコミットします。
  • branchAにチェックアウトします。
  • foo.txtはbranchAに表示されますが、hello.txtは表示されません。

foo.txtがbranchAに表示され、hello.txtのように「非表示」にならないのはなぜですか。

私の観点からすると、これは非常に煩わしく、バグ/機能のリクエストのように見えますが、Gitはこのように動作するように設計されていますか?これについて不満を言う人が他にいないことに驚いた。

4

3 に答える 3

4

これはバグではありません。それがどのように機能するかを理解するには、いくつかのことを知る必要があります。

  • .gitignoreグローバルに「自動的に」適用されるわけではありません。コミットする必要があります。
  • コミットされていないファイルは、すべてのブランチで表示されます。ブランチを切り替えるときはcommit、ファイルを変更する必要がありますstash

また、この質問以前に尋ねられましたが、検索で見つからなかったとしてもあなたを責めません. 別々の git ブランチにある 2 つの無関係なファイルの作業

于 2012-12-07T11:16:15.203 に答える
1

foo.txtはbranchAに表示されません。branchAをチェックアウトすると、.gitignoreへの変更(branchBにコミットしたと思います)が失われるため、無視されなくなりました。foo.txtは追跡されていないファイルです。branchAに切り替えたときにfoo.txtが「消える」ということは、作業ディレクトリからファイルを削除したいということです。これは、ファイルを無視することとは大きく異なります。

$ GIT_DIR / info / excludeファイルを使用してチェックアウトしたブランチに関係なく、リポジトリ全体に影響を与える無視パターンを指定できます。ただし、これはリポジトリに対してローカルであるため、このファイルで指定された無視パターンは他のリポジトリに伝播されません。gitignore(5)を参照してください。

于 2012-12-08T18:47:27.117 に答える
0

簡単な答え:

  • hello.txt は「非表示」ではなく、branchB にコミットされているため、branchB を branchA にマージまたはリベースするまで、branchA には表示されません。
  • 同じことが .gitignore にも起こります。.gitignore を branchB にコミットし (おそらくそうしていると思います)、branchA をチェックアウトすると、branchA には .gitignore ファイルがないため、foo.txt が表示されます。ここでも、branchB を branchA にマージまたはリベースする必要があります
于 2012-12-07T11:07:16.810 に答える