1

私のホーム ディレクトリは git リポジトリです。しかし、乱雑にすることなくコードを自由に作成/削除/テストできるようにするためにgit status、私の .gitignore には明示的にすべて無視があります:

[svenglar@my_box ~]$ cat ~/.gitignore
## Ignore everything by default.
## Use 'git add --force <file>' to add a file/dir.
*

これは、新しいディレクトリを作成しても、リポジトリに含まれないことを意味すると思います。しかし、そうではないようです:

[svenglar@my_box ~]$ git rev-parse --is-inside-work-tree
true
[svenglar@my_box ~]$ mkdir test
[svenglar@my_box ~]$ cd test
[svenglar@my_box ~/test]$ git rev-parse --is-inside-work-tree
true
[svenglar@my_box ~/test]$ git status
# On branch master
nothing to commit, working directory clean

git statusきれいだと思いますgit rev-parse --is-inside-work-treeが、新しいディレクトリはリポジトリの一部だと思います。

私の質問は、新しいディレクトリを作業ツリーの一部と見なさないように git を構成するにはどうすればよいですか?

--更新--

そもそもこれを尋ねている理由は、git リポジトリで作業しているときに .git-prompt.sh を使用して BASH のプロンプトを変更するためです。ホームフォルダーの下に、git repos である複数のプロジェクト (フォルダー) があります。それらのディレクトリの 1 つに cd すると、どのブランチがアクティブかなどを確認したいのです...

しかし、「ホーム」リポジトリにいるときは .git-prompt.sh を使用する必要はありません/使用したくありません。これは、「作業」ディレクトリとは見なされないためです。

私の修正は、最後の「printf」コマンドの前に次のチェックで .git-prompt.sh を変更することです。

 # Only modify $PS1 if we are not in the home repository.
 [[ $(git rev-parse --show-toplevel) =~ "${HOME}/" ]] && printf -- "$printf_format" "$c${b##refs/heads/}${f:+ $f}$r$p"

pwd以前は、含まれているかどうかのみを確認していまし${HOME}/た (最後のスラッシュは、サブディレクトリにいることを意味します)。

ご回答ありがとうございます。彼らは、なぜ私が間違っていたのかを理解するのを助けてくれました。

4

3 に答える 3

0

Git は、すべてが作業ツリー内にあると考えます。 .gitignoreコミット時に無視するファイルを git に指示するだけです。ホーム ディレクトリをリポジトリ ルートとして使用しない方がよいでしょう。代わりに、サブディレクトリを使用してください。

于 2013-06-05T19:42:04.010 に答える
0

できません。そして、それは理にかなっています。

その下のディレクトリ.gitは、プロジェクトの一部と見なされます。そうでなければ、ソース コードをどのように操作しますか?

本当にそれを望まない場合は、git リポジトリを の外部にそのままにして、環境$HOMEに を設定GIT_DIRします。次に、それを使用したいときに設定GIT_WORK_TREEします。$HOME

于 2013-06-05T19:42:16.210 に答える