20201125のGitに関する記事は7件です。

Bitbucket で運用途中にLFSを導入したメモ

git clone --mirror git@bitbucket.org:project/repo.git
cd repo.git

(以下のファイルパターンリストは git lfs migrate info などを見て適宜変える)

git lfs migrate import --include='*.exr,*.fbx,*.png,*.xls,*.otf,*.dll,*.db,*.psd,*.pptx,*.exe,*.dic,*.pdf,*.bin' --everything
git reflog expire --expire-unreachable=now --all && git gc --prune=now

(ここまでに “repo_lfs” レポを新たに作成しておく)

git remote add --mirror=push new git@bitbucket.org:project/repo_lfs.git
git push new
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Week 5】bash, ruby_first

はじめに

マルチスケールシミュレーション特論の講義メモです.講義メモのインデックスはコチラ

授業内で 学習メモがpublicになっていて,LGTMをもらえている という指示があったので,拙い内容ですが投稿しています.

概要

今回から Ruby の講義に入っていく.講義のメモは各回

  • チャート式 Ruby
  • Ruby 開発周辺情報

の2点を軸としてまとめる.

チャート式 Ruby 一覧

チャート式 Rubyで扱う内容は以下を予定している.

  1. puts (出力)
  2. variable and method (変数とメソッド)
  3. if-else, case, array and each (条件分岐と配列まわり)
  4. gem (ライブラリの使い方)
  5. recursion (再帰)
  6. class
  7. 仕上げ問題

Ruby 開発周辺情報 一覧

Ruby 開発周辺情報で扱う内容は以下を予定している.

  1. bash + emacs
  2. myhelp
  3. bundler
  4. rake
  5. rubular
  6. thor
  7. rubcoop

チャート式 Ruby

参照記事はコチラ

puts

今回から Ruby の講義に入る.はじめに学ぶ内容はプログラミングの初歩中の初歩である文字列の出力についてである.まずはみんな大好き

Hello World.

を出力するプログラムを作ってみる.

プログラムを管理するためにcodes ディレクトリを作成し, puts_hello_world.rb を編集する.

> mkdir codes
> cd codes
> emacs puts_hello_world.rb

puts_hello_world.rb は以下のとおり.

puts "hello world."

これを実行してみると,

> ruby puts_hello_world.rb
hello world.

期待通り hello world. が出力された.

Ruby で文字を出力できるメソッドは puts だけでない.以下にいくつか例を挙げる.

メソッド 使い方
print 引数の値を出力. 改行なし
puts 引数の値を出力.改行あり
p デバッグ用の出力.引数のオブジェクトがわかる
pp require 'pp'が必要.p と同じデバッグ用
printf c 言語と同等.複数の引数を渡すことができる

上記のメソッドを比較するプログラム p_print_hello_world.rb を作成する.p_print_hello_world.rb は以下のとおり.

puts "hello world."
print "hello world."
p "hello world."
pp "hello world."
printf "hello world."

これを実行してみると,

> ruby p_print_hello_world.rb 
hello world.
hello world."hello world."
"hello world."
hello world

各々出力が異なるので考察してみる.

> puts "hello world."
hello world. 
# 

> print "hello world."
hello world. (改行なし)
#

> p "hello world."
"hello world."
# 

> pp "hello world."
"hello world."
# 

> printf "hello world."
hello world
#

ARGV[0]

続いてコマンドライン引数を用いて

> ruby hello_name.rb Rudy

と実行したときに,

Hello Rudy.

と出力するプログラムを作ってみる.

Ruby でコマンドライン引数を扱うには ARGV[]を使う.python でも sys.argv (sys モジュールの argv メソッド) を使うので,コマンドライン引数を使いたいときはどの言語も argv で検索すれば良さそう.とりあえず hello_name.py を作成し,

puts ARGV[0]

を実行してみる.

> ruby hello_name.rb Rudy
Rudy

確かにコマンドラインの値を出力することができた.

ARG[0]は引数 (argment) 配列のインデックス番号 0 を指している.unix shell 上では command の option として引数を直接渡せるように用意されているらしい.

次にコマンドライン引数と文字列を組み合わせて出力させたい.Ruby ではいくつか方法があるので以下にまとめる.

メソッド プログラム
puts puts "Hello " + ARGV[0]
puts puts "Hello #{ARGV[0]}"
print print "Hello #{ARGV[0]}\n"
print print "Hello " + ARGV[0] + "\n"

先に書いたように printf でも問題なく出力できる.Ruby on Rails で Web アプリケーションを作った際に一番お世話になった2番目のプログラムで書いたものを実行する.

> ruby hello_name.rb Rudy
Hello Rudy.

無事コマンドライン引数を用いて出力をするプログラムを作成できた.

リダイレクト

実行結果を別ファイルに保存するには,以下のようにリダイレクトを用いるとよい.

> ruby hello_name.rb Hiroki > hello_name.txt

'>' はリダイレクト(redirect)といい,出力を txt に変更したものが指定したファイル先に保存される.

Hello Hiroki.

また,'<' の場合は 指定したファイルを入力として与えることができる.ファイルの中身は cat (concatinate)

cat hello_name.txt

で指定したファイルの中身を見ることができる.

Ruby 開発周辺情報

参照記事はコチラ

bash + emacs

shell

  • command 関連
    • command [objects]
    • command [options] [objects]
  • directory 関連
    • open [file] # ファイルを開く
    • mkdir [DIR] # ディレクトリの作成 (make directory)
    • pwd # カレントディレクトリ(print working directory)
    • cd [DIR] # ディレクトリの移動 (change directory)
    • cd .. # 一つ上のディレクトリへ移動
    • ls -al # ファイルやディレクトリの表示 (list all, long)
  • process 関連
    • ps, top # process status
    • fg, bg # fore, back ground
    • kill -9 PID # kill process id

などのコマンドで操作するCLI.(command line interface)

emacs

key-bind が充実しているテキストエディタ.というよりも key-bind での操作が前提のテキストエディタといった方が適している.emacs による一連の編集動作は以下のとおり.

> emacs hoge.org    # emacsの起動

# ファイル編集後
c-x c-s    # ファイルのセーブ

c-x c-c (quit) or c-z (stop)    # emacsの終了 

quit は emacs を終了,stop はプロセスを残して一時終了する.stop の場合は

> fg

で再び編集中の emacs を呼び出すことができる.

key-bind について,より詳しい内容は以下の記事に随時追加していきます.

【Memo】Emacs key-bind (Editing)

git

git について,詳しい内容は以下の記事に随時追加していきます.

【Memo】github & Qiita

次回の講義内容 <2020-10-28 Wed>

次回の講義は

だそうです.


  • source ~/grad_members_20f/members/e79a93e5b7b1/posts/class/c5_20201021.org
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

gerritとdockerを使って用途別のバージョン管理サイトを作ってみた。

初めに

この記事ではwindows版で書いています。
また、dockerはインストール済みの認識で書いています。
gerritとは、Googleが作成したコードレビューツールです。

目次

  1. この記事のターゲット
  2. なぜこの記事を書いたのか
  3. コンテナの用意
  4. バージョン管理サイトにアクセス
  5. gitの設定
  6. プロジェクトの作成
  7. プロジェクトのクローン
  8. 変更点をコミット
  9. コミットをマージ
  10. 最後に

1.この記事のターゲット

主に整理整頓が苦手な人向け

2.なぜこの記事を書いたのか

(長い上に本編に関係はないので読み飛ばしてください)
私は整理整頓が苦手です。
例えば部屋の片付け。
出したら出したまま。
前にどこに置いてあったかなんて一切覚えていません。
それ故に物を無くしがちです。
ただ、物はどこにあるか把握はしたいという欲張りです。
そこである考察が浮かびました。
「部屋が片付けられない」なら「物ごとに部屋を作ればいい」
そうすれば物を出したままにしようがどこに何があるか分かります。
これは部屋の片付けを例にしています。
よく考えるとこれは普段の業務にも関係していて、
自分のPCを見てみると「開発したら開発したまま」でした。
そこで「開発物を入れておく部屋」が欲しいと思いました。
また、当然その開発物は自分以外の誰かに見てもらいたい!と思い、githubを始めました。
ただ、誰かに見られる部屋は綺麗にしておきたいです。
(よく、小学生の頃とかに友達が遊びに来るからと散らかっている物を一旦押し入れに入れて部屋の見た目だけでも綺麗にするのと似た感情です。)
そこで自分の中でgithubだけは綺麗な部屋にしておいて別に「開発したら開発したまま」の部屋が欲しくなり探していて見つけた方法がgerritとdockerを使った方法です。

gerritで色々開発して上手く行った物等のプロジェクトをgithubに投稿することで
githubを「外から見られる綺麗にしたい部屋」
gerritが「開発したら開発したままの部屋」
という風に使い分けるのが最終目標です。

3.コンテナの用意

ますはイメージをプルしてきます。詳しい情報は公式サイトを参照してください。

docker pull gerritcodereview/gerrit[:version]-ubuntu20

末尾のubuntu20をcentos8にするとcentos版のイメージがプルできます。
次にコンテナを作成します。

docker run --name <作成したいコンテナ名> -d -p 8080:8080 -p 29418:29418 <IMAGE ID>

例えばpython用のバージョン管理サイトを作成したい場合は

docker run --name python_gerrit -d -p 8080:8080 -p 29418:29418 <IMAGE ID>

という風にコンテナに名前を付けます。

4.バージョン管理サイトにアクセス

バージョン管理サイト(localhost:8080)をブラウザで開きます。
次にSSH KEYを設定するために設定ページ(localhost:8080/settings/)に遷移します。
スクロールしていくとSSH Keysという場所があるのでそこまで遷移させます。

5.gitの設定

まずはコンテナに入ります。

docker exec -u 0 -it <CONTAINER ID> /bin/sh

SSH Keyの生成

# ssh-keygen -t rsa
# cat ~/.ssh/id_rsa.pub

ここでのcatの結果を4のSSH KeysにあるNew SSH keyに貼り付けてADD NEW SSH KEYをクリックします。

gitのアカウントの設定

# git config --global user.email "admin@example.com"
# git config --global user.name "admin"

6.プロジェクトの作成

下記のコマンドでプロジェクトを作成します。

# ssh -p 29418 admin@localhost gerrit create-project --empty-commit <プロジェクト名>

作成したプロジェクトはプロジェクト管理画面(localhost:8080/admin/repos)で確認できます。

7.プロジェクトのクローン

プロジェクト管理画面(localhost:8080/admin/repos)で先ほど作成したプロジェクトをクリックします。
そうするとDownloadと書かれたページに遷移するのでSSHタブのClone with commit-msg hookにあるコマンドをコピーしてシェルで実行します。

# git clone "ssh://admin@○○:29418/<プロジェクト名>" && scp -p -P 29418 admin@○○:hooks/commit-msg "<プロジェクト名>/.git/hooks/"

8.変更点をコミット

今回はtestとしてtestブランチを作成してtest.txtをコミットします。

# git checkout -b test
# echo "test" > test.txt
# git add test.txt
# git commit -m "test commit"
# git push ssh://admin@localhost:29418/<プロジェクト名> test(リモートにブランチが無い場合)
# git push ssh://admin@localhost:29418/<プロジェクト名> HEAD:refs/for/test(リモートにブランチが有る場合)

コミットが出来たかはコミット一覧ページ(localhost:8080/q/status:open)にて確認できます。(なお、リモートにブランチが無い場合はブランチが作成されるのでこちらのコミット一覧ページには表示されません。)localhost_8080_q_status_open(Pixel 2 XL).png

9.コミットをマージ

gerritでは、コミット1つ1つに対してレビューしなければマージすることができません。
そのためコミット一覧ページ(localhost:8080/q/status:open)で先ほどのコミットをクリックするとレビューが可能です。
レビュー後該当ページのCODE-REVIEWをクリックしSUBMITをクリックすることでコミットがマージされます。

右上のCODE-REVIEWをクリック

localhost_8080_q_status_open(Pixel 2 XL) (1).png

右上のSUBMITをクリック

localhost_8080_q_status_open(Pixel 2 XL) (2).png

中央のCONTINUEをクリック

localhost_8080_q_status_open(Pixel 2 XL) (3).png

マージ完了

localhost_8080_q_status_open(Pixel 2 XL) (4).png

10.最後に

用途ごとに3のようにコンテナを作成する事でバージョン管理サイトを用意することができます。
gerritは今回紹介した用途の他にもたくさんの使用方法があるので色々触ってみてください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

GitLabからGitHubへの移行したときの手順いろいろ

1.https://github.com/new/import で色々入力してBegin importを押す

2.途中出てくるアドレスとパスワードを入力

3.(不要なブランチがいっぱいあったので移行したついでに)developブランチにマージされていないブランチを、developとmasterとreleaseブランチを除いて削除

git branch -r --no-merged origin/develop | grep -v -e develop -e master -e release | sed -e 's/origin\///g' | xargs -I {} git push -d origin {}

4.developブランチにマージされているブランチを、developとmasterとreleaseブランチを除いて削除

git branch -r --merged origin/develop | grep -v -e develop -e master -e release | sed -e 's/origin\///g' | xargs -I {} git push -d origin {}

5.変な名前のブランチ(hoge)があったので名前をfugaに修正

(hoge)$ git branch -m fuga
(fuga)$ git push origin fuga
(fuga)$ git push -d origin hoge
(fuga)$ git branch --unset-upstream

参考URL
https://dev.classmethod.jp/articles/what-github-importer-holds/
https://dev.classmethod.jp/articles/git_remove_merged_branch/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Sourcetree SSHキーの設定



原因はわかりませんが、突然git push ができなくなって、手動でSourcetreeでのSSHキーの作成からGithubへの再登録を行った。

その忘備録。

問題

Sourcetreeでいつもの通りにコミットした内容をリモートリポジトリにプッシュしたら以下のようなエラーが出た。
念のためターミナルソフト(CUI画面)で再度プッシュしても以下のエラーが出た。

git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

解決策

結論、元々Sourcetreeによって作成されていたファイルを削除して(sshディレクトリ内のconfigファイルのSourcetreeによる記述箇所とSourcetreeによって作成されたsshキー)、SSHキーを再度作成して、GitHubに登録したら直った。

以下に手順を示す。

sshディレクトリ内のconfigファイルの修正及び、公開鍵、秘密鍵の削除

configファイルの修正

~/.sshディレクトリ内のconfigファイルをvimでも何でも良いので開くと以下のような記述を見つけることができると思います。
このHost ~GitHubからAddKeysToAgent ~までの行を全て削除します。その後configファイルを保存します。

公開鍵、秘密鍵の削除

新しくキーを生成するので、Sourcetreeによって生成されたキーを削除します。
Sourcetreeによって生成される鍵はおそらく、”[your-github-username]-GitHub.pub” と “[your-github-username]-GitHub”になってると思います。
(今回はGitHubを使用していることを想定していますが、Bitbucketでも同じようなファイル名になっていると思います。)
これを削除します。

Sourcetreeでのキーの作成

  • Sourcetreeを開いて、(macなら)歯車マークをクリックして「アカウント」をクリックします。
  • 問題のアカウントをクリックして、左下の「編集」タブをクリックします。
  • キーを削除したので、SSHキーの欄が「キーがありません」などの表示になっていますので、「キーの生成」をクリックして新たに作成します。
  • 作成後「クリップボードにコピー」をクリック
  • Githubのアカウントで「SSH and GPG keys」の欄を開く
  • SSH keysにある問題のSSHを「Delete」する。
  • 「New SSH key」をクリック
  • Titleは任意に決めてください。Keyに先ほどクリップボードにコピーしたものをペーストして保存して終了です。

以上で終了です。おそらくSourcetreeからプッシュできるようになっていると思います。
それかターミナルで

$ ssh -T git@github.com

でアクセス可能か確認できます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

コミットコメントにプレフィックスを含めると分かりやすくなる

プレフィックス

angular.jsのDEVELOPERS.mdを参考

  • feature: 機能追加
  • fix: バグ修正
  • docs: ドキュメント修正
  • style: コードスタイル修正(フォーマッター適用など)
  • refactor: リファクタリング。機能追加やバグ修正など、動作を変更するものは入れないこと!!
  • performance: パフォーマンス向上目的の修正
  • test: テスト系のみの修正

参考のほうは、略称を使ったりしていたがブランチ名にも使いたいため、略さずにつけることにした。

あと、ライブラリ修正とか細かすぎるかなぁと思うところは消した。

ブランチ名も合わせる

  • feature/converter
  • fix/converter
  • refactor/converter

などなど

感想

職場でもコミットコメントのプレフィックス付ける部分のみやってみたが、リリース時の今回修正分確認が分かりやすくなり、非常に良かった。

ブランチ名を合わせるところまでやると、ブランチ一覧で大体の進行度合いが分かり、良さそうではある。

featureのコードレビュー時に、規模の大きいリファクタリングが入っていると、かなり辛くなるので、上記意識するとそういうのが無くなるかも?的な期待もある。

とりあえず、コミットコメントの先頭プレフィックスだけでもやってみるのが、コスパも良いしおすすめ。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【git】pushしてしまった後に過去コミットに戻す方法

gitでリモートにpushしてしまったけど、過去コミットに戻したい!そんな時の攻略法を簡潔に紹介

1 git log でコミットの 番号を確認する

$ git log

するとこんな感じで出てくる

commit 6ca09f7747e6ef84761d9d33a8373731836877eb (HEAD -> feature/tweet_list, origin/feature/tweet_list)
Author: nozomi <kkk@docomo.ne.jp>
Date:   Sun Nov 22 13:23:21 2020 +0900

    ページネーションを実装

commit cc2ede3638ebe6a6b768aa1fd269a2262e79d400
Author: nozomi <kkk@docomo.ne.jp>
Date:   Sun Nov 22 12:44:28 2020 +0900

    seed画像をビューに表示。アップロード画像をgit管理下から排除


今回は
seed画像をビューに表示。アップロード画像をgit管理下から排除に戻りたい想定で説明を続けます!

戻りたいコミットの番号をメモしとく
今回の場合は、cc2ede3638ebe6a6b768aa1fd269a2262e79d400 が番号になります。

2 git reset --hard 番号を使い、指定コミットに戻す。

今回は
seed画像をビューに表示。アップロード画像をgit管理下から排除に戻す処理なので、以下のように書きます。

$ git reset --hard cc2ede3638ebe6a6b768aa1fd269a2262e79d400

3 リモートリポジトリに強制push

git push -f origin HEAD

これにて完了です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む