チェンジセットにたくさんのファイルがありますが、変更された単一のファイルを特に無視したいのです。 git status
の後にこのようになります:
# modified: main/dontcheckmein.txt
# deleted: main/plzcheckmein.c
# deleted: main/plzcheckmein2.c
...
私はgit add
を行うことができますが、私が触れたくない1つのテキストファイルを単に無視することができる方法はありますか?何かのようなもの:
git add -u -except main/dontcheckmein.txt
git add -u
git reset -- main/dontcheckmein.txt
1)すでにバージョン管理されている単一のファイルへの変更を無視し始める
git update-index --assume-unchanged "main/dontcheckmein.txt"
そのgit update-index --no-assume-unchanged "main/dontcheckmein.txt"
を元に戻す
2)特定の単一ファイルを無視してリポジトリに作成されないようにする
これを最初に見て Git global ignore ignore -
そして.gitignore
で、./
を先頭に付けずにファイルへの相対パスを追加します。
あなたのファイルがMyProject/MyFolder/myfile.txt
にある場合(.git
もMyProject
にある場合)、.gitignore
にあなたはこのMyFolder/myfile.txt
を置く
git check-ignore "MyFolder/myfile.txt"
を使用して、どのルールが無視に関連しているかを確認できます。
グローバル無視について
そのリンクは~/.gitignore_global
について述べています。しかし、ファイルはあなたのプロジェクトに関連しています。そのため、除外パターンMyFolder/myfile.txt
を~/.gitignore_global
に置くと、うまくいきますが、あまり意味がありません...
一方、プロジェクトをgit config core.excludesfile .gitignore
で設定した場合、.gitignore
はMyProject
になります。その設定は/を持つことができる~/.gitignore_global
をオーバーライドするでしょう - とても便利なルール ...
ですから、今のところ、.gitignore
で~/.gitignore_global
と.gitignore
を混在させるスクリプトを作成するのが最善だと思います。
最後の警告
無視したいファイルがすでにリポジトリにある場合、この方法では実行しないとうまくいきません:git rm "MyFolder/myfile.txt"
、ローカルにも削除されるので最初にバックアップしてください!後でコピーし直すことができます...
ファイルの場合
git add -u
git reset -- main/dontcheckmein.txt
フォルダの場合
git add -u
git reset -- main/*
git
はpathspec magic :(exclude)
とその短縮形exclude certain paths and files
によって:!
をサポートするようになりました。それで、あなたは次のコマンドとしてそれを簡単に達成することができます。
git add --all -- :!main/dontcheckmein.txt
git add -- . :!main/dontcheckmein.txt
実際にはもっと指定することができます:
git add --all -- :!path/to/file1 :!path/to/file2 :!path/to/folder1/*
git add -- . :!path/to/file1 :!path/to/file2 :!path/to/folder1/*
ベンジャクソンは正しいのですが、私は私がその解決策をどのように使ってきたかを追加すると思いました。以下は、.gittrackignore
というファイルにリストされている少数のものを除いて、すべての変更を追加するために使用する(gitaddと呼ぶ)非常に単純なスクリプトです(.gitignoreの動作と非常によく似ています)。
#!/bin/bash
set -e
git add -A
git reset `cat .gittrackignore`
これが私の現在の.gittrackignore
のようなものです。
project.properties
私はデプロイ時にコマンドラインからコンパイルするAndroidプロジェクトに取り組んでいます。このプロジェクトはSherlockActionBarに依存しているので、project.propertiesで参照する必要がありますが、コンパイルと混同されるので、今はgitadd
と入力して、project.propertiesを一度に追加解除することなくすべての変更をgitに追加します。
これを試して:
gitチェックアウト - main/dontcheckmein.txt
ファイルの変更を保持するがコミットしないために、私はこれをしました
git add .
git reset -- main/dontcheckmein.txt
git commit -m "commit message"
ファイルが除外されていることを確認するには
git status
git add -A
を使用して、修正されたファイルと新しく追加されたファイルをすべて一度に追加します。
例
git add -A
git reset -- main/dontcheckmein.txt
コミットする変更:(ステージを解除するには "git reset HEAD ..."を使用します)
私はgit add --patch
をかなり使っていて、ヒットするのを避けるためにこのようなものが欲しかったです。 d いつも同じファイルを通して。私は仕事を終わらせるために非常にハックなgitエイリアスを作りました。
[alias]
HELPER-CHANGED-FILTERED = "!f() { git status --porcelain | cut -c4- | ( [[ \"$1\" ]] && egrep -v \"$1\" || cat ); }; f"
ap = "!git add --patch -- $(git HELPER-CHANGED-FILTERED 'min.(js|css)$' || echo 'THIS_FILE_PROBABLY_DOESNT_EXIST' )"
私の場合は、常に特定の縮小ファイルを無視したいだけでしたが、より一般的な使用例として、$GIT_EXCLUDE_PATTERN
のような環境変数を使用するようにすることもできます。
問題の特定のケースでは、最も簡単な方法は、 .c 拡張子を持つすべてのファイルを追加し、それ以外はすべて除外することです。
git add *.c
git-scm (または/およびman git add
)から:
git add <pathspec>…
コンテンツを追加するファイル。ファイルグロブ(例:* .c)を指定すると、一致するすべてのファイルを追加できます。 <...>
これはあなたが以下のようなこともできることを意味することに注意してください。
git add **/main/*
main
フォルダー内にある(無視されない)すべてのファイルを追加します。もっと手の込んだパターンを使ってワイルドにすることもできます。
git add **/s?c/*Service*
上記はs(any char)c
フォルダにあり、ファイル名のどこかにService
を持つすべてのファイルを追加します。
明らかに、あなたはコマンドごとに1つのパターンに制限されていません。つまり、 .c および .h の拡張子を持つすべてのファイルを追加するようにgitに依頼できます。
git add *.c *.h
この link はもっとグロブパターンのアイデアをあなたに与えるかもしれません。
多くの変更を加えるときには特に便利だと思いますが、そのとき作業している可能性のある変更の寄せ集めよりも、コミットをアトミックで段階的なプロセスを反映させたいと思います。もちろん、ある時点では、複雑なパターンを考え出すためのコストが、より簡単な方法でファイルを追加するコスト、または一度に1つのファイルを追加するコストを上回ることがありました。しかし、ほとんどの場合、必要なファイルだけを簡単なパターンで簡単に特定でき、それ以外はすべて除外できます。
ちなみに、あなたはmayそれらが機能するためにあなたのglobパターンを引用符で囲む必要がありますが、これは私には当てはまりませんでした。