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









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



All Articles