2017-06-10 5 views
1

私の質問はこれです:.gitignoreファイルにディレクトリを持つgit repoがあります。通常これは動作し、ディレクトリ内で変更されたファイルは無視されます。しかし、私はは、それらのファイルは、IEを無視しないブランチから無視されたディレクトリにファイルをチェックアウトする場合:ブランチからGitチェックアウトファイルを追跡せずに

git checkout a_branch /c/IgnoredDirectory 

私は

を行う際には無視されるべきでは現在追跡されたディレクトリとファイルのことを見つけます
git status 

どうすれば別のブランチからファイルを追加できますか?gitでファイルを追跡する必要はありませんか?私の考えは、gitが.gitignoreファイルの無視されたディレクトリにあるので、私が追加するファイルを無視しなければならないということです。ここで私はどこが間違っていますか?

コード:

マイ.gitignoreファイル

RecordDataBases/ 

と私は別々の枝からファイルをチェックアウトし、gitの状態を実行したときに私が取得:

new file: RecordDataBases/AstroFiles 
    new file: RecordDataBases/AstroFiles_goodversion 
    new file: RecordDataBases/AstroFiles_old_file 
    new file: RecordDataBases/README.rtf 

感謝を

答えて

0

正しいです:git checkout commit-specifier -- pathsは、指定されたコミットから指定されたパスをコピーし、 インデックスステージングエリアとも呼ばれます)。インデックスに登録されると、となります。次に、ディレクトリまたはグロブ展開の結果として得られる同じフルパスを使用して、インデックスからワークツリーにファイルをコピーします。

はインデックスを任意のファイルはは、定義によって追跡されているので、あなたのタスクは、最初の場所でのインデックスにそれらを避けるために、またはその後再びそれらを削除するかのいずれかです。例えば

git rm -r --cached RecordDataBases/ 

(しかし、それはこのようなファイルのすべてのインデックスエントリ、git checkoutステップで作成されていないだけで、インデックスエントリを削除することに注意してください):後者は簡単です。 --cachedオプションは、git rmに対して、ファイルのみを削除するように指示し、作業ツリーからは削除しません。

上記の代わりに、指定したコミットから最初にインデックスにコピーすることなくファイルを抽出することができます。最も簡単な方法は、git showを使用して、git show commit-specifier:path > pathの構文(git show a_branch:RecordDataBases/AstroFiles > RecordDataBases/AstroFilesなど)を使用することです。各パス名を繰り返す必要のほかに、いくつかの注意点がここにあります

  • これは(部分木を含む全体のディレクトリツリーを取得する簡単な方法はありません)一度に一つのファイルをやっ必要です。
  • デフォルトでは、行末、ident、またはスダージフィルタのアクションは省略されています。

ただし、拡張されたパスは最初にインデックスにコピーされないため、後でインデックスから削除する必要はありません。

+0

ありがとう、それは私が探していた答えです。 –

関連する問題