自分の作品の一部をGitHubアカウントにアップロードして見せびらかしたい。ただし、データベース接続など、パスワードを含むファイルがいくつかあります。
GitHubに表示されないように、ファイルをGitでコミット不可としてマークする方法はありますか?
GitHubに表示されないように、ファイルをGitでコミット不可としてマークする方法はありますか?
まず、ローカルのGitリポジトリで一部のファイルとコミットを表示する方法はありませんが、どういうわけかGitHubでは表示できません。 Gitでファイルをコミットした場合、GitHubに表示されます。
次に、個々のファイル自体を「コミットできない」ものとしてマークする簡単で実用的な方法はありません。ただし、Gitリポジトリ内のファイルを無視する方法は間違いなくあります。ファイル(必要に応じて相対パスを含む)を .gitignore
ファイル :
.gitignore
ファイルは、Gitが無視する意図的に追跡されていないファイルを指定します。 Gitによってすでに追跡されているファイルは影響を受けません。詳細については、以下の注を参照してください。
基本的な.gitignore
はプレーンテキストファイルなので、簡単に作成できます。したがって、たとえば、ルートにconfig.php
ファイルがある場合、これを実行します。 PHPを使用していると仮定しますが、コンセプトはすべてのセットアップに適用されます。また、この例ではテキストエディタとしてNanoを使用していますが、これに通常使用するテキストエディタを自由に使用してください:
nano .gitignore
そして、そのファイル名をそのファイルに追加するだけです:
config.php
保存すると、Gitはそのファイルを単に無視します。
とは言っても、このようなセットアップで私がやりたいのは、サンプル/サンプルの構成をリポジトリ内の機密性の高い特定のものから削除することです。そのため、構成ファイルの形式が次のような名前のファイルであるということについて、いくつかのリファレンスがあります。
config.SAMPLE.php
これにより、config.php
ファイルがconfig.SAMPLE.php
を介してどのように設定されるかを正確に把握でき、実際のconfig.php
がGitに触れられないようにすることができます。
また、コードを自慢することを計画している場合は、誰かがそのコードを取得して独自のシステムに何らかの方法で実装しようとすることを期待する必要があります。覚えておいてください。私たちはあなたではなく、リポジトリにサンプルの構成ファイルがないと、人々は自分でコードを実装する方法を本当に理解しません。基本的には、基本的な構成例を提供しなかったために、自分が能力がないと考えているかもしれません。
コミット前フックを追加して、健全性チェックを実装することもできます。すべてのgitリポジトリの.git/hooks
ディレクトリには、いくつかのサンプルスクリプトがあります。
pre-commit
というスクリプトは、各コミットの前に存在する場合に実行され、ゼロ以外の戻り値はコミットを中止します。
たとえば、次のような簡単なスクリプトを作成できます。
#! /bin/sh -e
git ls-files --cached | grep -qx 'filename' && { echo "Excluded file included in the commit" >&2; exit 1; }
exit 0
そして、そのfilename
が一致すると、コミットは失敗します。
@JakeGouldの発言場合によっては、skip-worktree
やassume-unchanged
などの特別なファイルビットを使用して、次のように設定することもできます。 2つの違いについては、 このスタックオーバーフローの回答を参照 :
git update-index --assume-unchanged <file>
これにより、既存のファイルへの追加の変更が非表示になり、プルするたびにファイルを残したい場合に使用できます。しかし、私はあなたが本当にあなたが何をしているのかを知っている場合にのみそれを使うことを勧めます。
@JakeGouldが言ったように.gitignore
を使用します。さらに、いくつかの関連情報:
.gitignore
は、ファイルが追跡されないようにします。すでに追跡されている場合は、git rm --cached
を使用して削除します$GIT_DIR/info/exclude
内のファイル/パターンも無視されます~/.gitconfig
のcore.excludesFileで指定されたファイル内のファイル/パターンも無視されます。詳細は 公式Gitドキュメント を参照してください。
Jakeと46の回答を拡張するには、非常に良い方法の1つは、個人情報を含むファイルに一貫した拡張子を使用し、.gitignore
を使用して、その拡張子を持つファイルを常にグローバルに除外することです(他の場所で言及されている.gitconfig
ファイルを使用して、常に無視されます)。
そうすれば、たとえば次のようにすることができます。
/projectname/mypasswords.exc
また、*.exc
をグローバルに除外した場合は、その特定のファイルを個別に除外するのを忘れても、コミットされないことがわかります。