Git暗号化のニュアンス

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 }"


これで、トピックが明らかになることを願っています。

Source: https://habr.com/ru/post/J340076/


All Articles