GitHubやGoogleDriveなどのパブリックリソースを使用してリポジトリを保存したいが、作業結果を全世界と共有する準備ができていない場合は、gitリポジトリ内のファイルの暗号化が役立ちます。 これは極秘の技術ではなく、このトピックに関するインターネット(およびHabréでも)にいくつかの小さな記事がありますが、それらはすべて属性に特化したgitドキュメントのバリエーションであり、トピックをまったく明らかにしていません。 さらに、このモードでgitを使用するプロセスには、理解と解決が必ずしも容易ではないニュアンスがあります。これについては、この記事で強調します。
環境
最初は、暗号化ソフトウェアがコンピューターで利用可能であると想定されています。 自然な選択はopensslを使用することです。 Linuxでは、デフォルトです。 Windowsでは、Windows用のgitインストールでmingwにバンドルされています。 Windowsで注意する必要があるのは、opensslが置かれているフォルダー(たとえば、「C:\ Program Files \ Git \ mingw64 \ bin \」)がPATH環境変数に表示されることだけです。 その後、追加のユーティリティを作成する必要はなく(gitの暗号化に関する記事で推奨されているように)、設定全体がはるかに簡単になります。
Gitセットアップ
それでは、gitで属性を作成する魔法をやってみましょう。 最初に、ツリーで正確に暗号化するものを把握する必要があります。 私のようなベテランの偏執狂者なら、すべてを暗号化することにします。 空の.gitattributesリポジトリのルートにファイルを作成します。
* filter=openssl diff=openssl
.git* !filter !diff
init.txt !filter !diff
あまり妄想的でない場合は、ワイルドカードを* .javaまたは* .cppに置き換えて試してみてください。
なぜinit.txtなのですか? リポジトリのクローンを作成する場合に、インターネット上の指示を必死に検索する必要がないように、自分用の短いメモを作成します。
さらに 、新しいクローンコピーで暗号化を初期化
するためのShelovスクリプトとして非常にうまく使用できます。
次に、上記のinit.txtファイルを作成します。
<code>#これは保護されたリポジトリです。 初期化するには、次のものが必要です。
#
#git clone -n https://github.com/ <your_project_name>
#git checkout tags / init
#次にシェルで実行します:
#。 init.txt <リポジトリのパスワード>
[-z "$ 1"] && echo "引数が必要です:<パスワード>" && return
git config filter.openssl.clean "openssl enc -base64 -aes-256-ecb -S 123456789 -k $ 1"
git config filter.openssl.smudge "openssl enc -d -base64 -aes-256-ecb -k $ 1"
git config diff.openssl.textconv "openssl enc -d -base64 -aes-256-ecb -k $ 1 2&> / dev / null || cat"
git checkout master </ code>
パスでgitとopensslが使用可能であることを確認した後、コメントに示されているようにファイルを実行します(Windowsを使用している場合は、git-bashから実行する必要があります)。
. init.txt my_repo_pass
または、手作業でこのファイルから3つのgit configコマンドを起動し、行の1ドルをリポジトリのパスワードに置き換えます。
次に、これをすべてリポジトリに追加します。
git add .
git commit -m "protection initialization"
git push
git tag init
git push --tags
出来上がり、すべての準備が整いました。 これで新しいファイルを追加でき、それらは自動的に暗号化されます。
Intelijとの統合
今から楽しい部分です。 スクリプト化されたJavaプロジェクトをgithubで作成して作業を開始すると、IDEのgitプラグインは以前のバージョンとファイルを比較したくないことにすぐに気付くでしょう。 これは、intelijが
git showコマンドを使用してリポジトリからファイルの以前のバージョンをプルするためです。 ここで注意:
git showおよび
git format-patchコマンドは、デフォルトではフィルターを使用しません。 これを行うには、-textconvオプションを指定する必要があります。 自分でgitプラグインを取得できなかったため、gitの小さなラッパーを作成し、設定で指定しました。 このオプションは自動的にshowコマンドに追加されます。
git4idea.bat
@echo off
set ARGS=%*
"C:\Program Files\Git\bin\git.exe" %ARGS: show = show --textconv %
Linuxのオプション(残念ながらテストされていません):
#!/bin/bash
export ARGS="$*"
git "${ARGS/ show / show --textconv }"
これで、トピックが明らかになることを願っています。