𝕏/Twitterでは分散バージョン管理システム(DVCS)Gitが難しいと言ったり、Gitの利用を避けている人々を、ITスクール講師とIT技術動画配信者が「いまどきGitを使えないなんて…」と煽る光景を見かけることがある。
GitはLinuxのバージョン管理のためにLinus Torvalds御大に開発されたツールで、今ではオープンソース製品のコード管理の他、ウェブから機械学習あたりのシステム開発でも広く使われている。他にも色々とある*1が、現状でVCSの第一選択肢だ*2。
多人数で開発するときもそうだが、個人でテキストファイルの管理をするのにも便利なツールで、膨大な利用者数がいる。内部構造まで理解しようとしたり、様々な機能を利用しようとすると学習量が多いが、更新履歴を保存し、ソースコードを共有する目的であれば、扱うのが難しいということはない。
それではなぜGitは難しいと感じられるのか — ITスクール講師とIT技術動画配信者の教え方が悪いか、コンテンツミル事業者が山のように作成している紹介ページが利用の要点を押さえていないからでは無いであろうか。ざっと眺めた感じではあるが、誤った操作をした後の復旧方法の解説が弱い。
日々のGit利用ワークフローを思い起こしながらGraphvizで描いてみた。実線が間違いが無い場合、点線が間違った後の流れだ。実際に使うとかなり頻繁に訂正操作が要る。だって人間だもの。
ITスクール講師とIT技術動画配信者はclone, add, commit, pull, pushぐらいのコマンドでざっと紹介して終わりにする事が多いようだが、それぞれを取り消す方法も紹介しておかないと実用にはならない。
日々、記録していくのが基本のワークフローなので、
- 編集ミスで中身を破壊したときや、誤って削除したときはgit-checkoutすれば、任意の(VCSに記録されたソースコードの状態である)コミットに戻せる
- -pをつけて(コミット予定状態になる)ステージング(git-add)しておけば、概念的に複数の変更を同一ファイル内に行ってしまったときに、一部だけステージングできる
- 誤ったステージングはgit-resetで解除できる
- 前回のコミットに上書きしたい場合はgit-commitに--amendをつける
- コミットを取り消したいときはgit reset --soft HEAD~でできる
- コミット取り消しを取り消したい場合は、git reflogで元に戻したいコミット番号nを調べて、git reset HEAD@{n}だ
- 複数の(コミットと前のコミットの差分である)チェンジセットを一つにまとめたり、ちょっと前のコミットを修正したいときはgit rebase -iで歴史改編
と言うように、それに関する操作ミス後(やその他のトラブルから)の復旧方法を、何となく知っていれば気が楽になる。検索したり、生成AIに質問するなりすれば、詳しい解決方法が分かるわけだが、手がかりになるコマンドがあれば捗るはずだ*3。
ところでこういう日々のワークフローに必要な情報を忘却しているITスクール講師とIT技術動画配信者の皆さんは、実際にGitを使っているのか疑問である。コンテンツミル事業者のように他のサイトの情報をコピペしているだけなのでは無いであろうか。
*1開発される前はUNIXやLinux界隈ではSVNが主流で、MS-Windows用のアプリケーション開発ではVSSがスタンダードであり、他にもGit開発前にLinux開発者が使っていたBitKeeperのような商用製品もあった。他にGitを参考にしてつくられた、Gitと似ているがコンセプトが若干異なるMercurialなどがある。
*2以前から使い続けているSVNをそのまま使い続けていることは多々ある。開発者などが慣れていれば、それで間に合うことが多いので。
*3ありがちがだが、日常的にはしたくない訂正作業もある。push後にコミットを撤回したい場合はgit-revertが使えるが、履歴は残るのでpush前はよくよく注意しよう。
パスワードなどの機密情報をcommitしてpushしてしまった場合などは、git filter-branch(filter-repo)で関連コミットをまとめて置換し、共有リポジトリやクローンリポジトリなど全てをキャッシュやバックアップなどを含めて置き換えればよいのだが、パスワードの漏洩は既に起きてしまったことになるおで気をつけよう。
0 コメント:
コメントを投稿