やりたいこと
CodeCommitにアクセスできない環境で開発を実施していて、あるタイミングでそのファイル群をリポジトリにpushしたいということがありました。
意外とハマったので記事にします。やりたいことを箇条書きにすると、以下となります。
- 渡されたzipファイルを、解凍してCodeCommitにpushしたい
- 既にCodeCommitにはリポジトリが作成されており、その中で更新したいファイルがzipに固められている
- サブフォルダもあるので、GUIでのpushはきつい
方法
Cloudshellでzipファイルを解凍して、cloneしてきたフォルダにコピーして、pushします。
Cloudshellでzipファイルをuploadする
ブラウザでコンソールにログインして、Cloudshellをクリック。
その後、右上の「Actions」→「Upload file」をクリックして、zipファイルをアップロードします。
ちなみに、アップロードしたファイルは/home/cloudshell-user
にアップロードされます(デフォルトのユーザー名の場合)。
zipファイルを解凍する
unzipコマンドでここに解凍します。
unzip filename.zip
更新したいリポジトリのHTTPSのアドレスをコピー
git clone
するために、CodeCommitのコンソールからコピーしてきます。
対象のリポジトリのHTTPS
をクリックします。
クローンする
Cloudshellで、git clone
しましょう。
リポジトリが、Cloudshell環境上にコピーされてきます。
(以下のコマンドのcodecommit~~~repository
の部分は、ご自身の環境のリポジトリのHTTPアドレスに変更してください)
git clone codecommit::ap-northeast-1://xxxxxx-repository
コピーする
ここが重要ポイント。
zipから解凍したフォルダを、クローンしてきたリポジトリにコピーします。
コピーなので、元々リポジトリ内にあったファイルが削除されることはなく、新規作成と更新のみ実行されます。
- rTオプションは、大文字小文字間違えず入力してください。
- rオプションはサブディレクトリも含めて再帰的にコピーします。
- ただ、これだけだとコピー先がディレクトリの場合、その下にコピー元ディレクトリをコピーしてしまいます。
- これを避けるために、Tオプション(大文字)もつけます。
- 以下のQiitaが分かりやすいです。
- https://qiita.com/mangano-ito/items/87d269325ff29c95f0ef
- コピー元、コピー先はディレクトリを指定してください。
-
/*
とか.
とかつけなくてよいです。
-
cp -rT /home/cloudshell-user/src /home/cloudshell-user/xxxxxx-repository
gitコマンドでpush
あとは、クローンしたディレクトリ内に移動して、以下のコマンドを実行します。
git add .
git commit -m "sample comment"
git push
おわりに
cpコマンドやmvコマンドで結構試行錯誤しました。
mvコマンドだと、サブディレクトリ内の更新ができないので、cpコマンドで実行することをお勧めします。
Linuxの基本コマンドは、まだまだ知らないことだらけや・・・。