20201018のGitに関する記事は5件です。

git rebaseの使い方

git rebaseとは

Git には、ブランチを統合するための方法がmergeとrebaseの2つあります。rebaseは、作業が完了したブランチを分岐元のブランチにくっつける時に使う機能です。mergeとの違いも含めて、rebaseについて解説していきます。

リベースを使うと何がいい?

ずばり、コミット履歴が綺麗になることです!!
より具体的には、

  • コミット履歴が一直線になってわかりやすくなる
  • 複数のコミットを一つに統合できる

などといったメリットがあります。

リベースはコミットが一直線になる

今、branchAとbranchBという2つのブランチがあるとします。
スクリーンショット 2020-10-18 22.17.28.png

マージの場合

まずはmergeを使って、branchBへbranchAを取り込む場合を見ておきましょう。

git checkout branchB
git merge branchA

image.png

マージだとコミット履歴が枝分かれした後、合流するといった形になり、一直線にはなりません。

リベースの場合

では、branchBをbranchAにリベースしてみます。

git checkout branchB
git rebase branchA

image.png

同じ内容の別コミットC'、D'が指定したブランチの先から作られることで、一直線になります。

リベースは複数のコミットを1つのコミットにまとめられる

今、4つのコミットABCDを持つbranchがあるとします。
これら4つのコミットはそれぞれが微修正であるため、ひとまとめにしたいです。
そんなときは、rebaseの「-i」オプションを利用するといいです。
image.png

git checkout branch
git rebase -i [ひとまとまりの直前のコミットのID]

image.png
「新規コミットE」として、指定した複数のコミットをまとめられました。

リベースの注意点

綺麗で見やすいコミット履歴を作成するのに、とっても役立つリベースですが、注意点もございます。
それは、rebaseコマンドは処理を作り直してしまうため、既存のコミットへ影響を与えてしまうことです。
安易に使用すると、誰かのコミットを勝手に作り直すことになり、チームに混乱を招くことに繋がります。
pushして誰かの目に触れた処理や、他の人の手の入っている箇所では、rebaseでなくmergeを使用するようにしましょう。
そして、誰にも影響を与えないローカルの開発内容のみ、rebaseを使用するようにするといいと思います。

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

gitに自動pushする方法

はじめに

私はAtCoderの過去問を解いたらそのソースコードをgithubにpushしています。
毎回同じコマンドを打つのはめんどくさいので、Macでlinux系のコマンドcrontabを使用してgit pushを自動化しました。

crontabとは

決まった時間に自動的にコマンドを使用してくれるデーモンプロセスです。

crontab -eでコマンドの登録をします。

分 時 日 月 曜日 コマンド
*  *  *  *  *  some_commands

*はワイルドカードを意味しています。

例えば、以下のようにすると、毎日20時0分にechoしてくれます

分 時 日 月 曜日 コマンド
0  20  *  *  *  echo "Hello World!"

Macでの注意点

私はmacOS 10.15.5 catalinaを使用しているのですがこのままだとcrontabが動かないので、
フルディスクアクセスにcronを追加しましょう。
このサイトのやり方が参考になります。

crontabにgit pushを登録

SSH のラッパースクリプト(git_ssh.sh)を作成します。

git_ssh.sh
#!/bin/bash

exec ssh -o IdentityFile=/path/to/id_git_rsa "$@"

秘密鍵とシェルスクリプトのパーミッションを変更します。
こうすることで秘密鍵を利用して git push が実行されます。

chmod 600 /path/to/id_git_rsa
chmod 755 /path/to/git_ssh.sh

crontab -eを実行して以下のコマンドを書き込みます。

crontab
0 20 * * * cd /path/to/git_repository; export GIT_SSH=/path/to/git_ssh.sh; git add .; git commit -m "daily commit"; git push -u origin master;

これで毎日20時0分にgit pushが実行されます。

実行されない場合

crontabが実行されてないとmailにエラーが届きます。

ターミナルでmailと打つの内容が見れます。

私は以下のようなエラーが出ました。

fatal: could not read Username for 'https://github.com': Device not configured

リポジトリのリモートURLがHTTPSになっていたのが問題っぽいです。
このコマンドを打ちましょう。

git remote set-url origin git@github.com:username/repo.git

私はこれでエラーが解決でき、無事にgit pushできました。

まとめ

crontabを利用してgit pushを自動化しました。皆さんも是非crontabを利用してみてください。

参考文献

https://qiita.com/ryusukefuda/items/878556158d8f1d3d887a
https://mac-ra.com/catalina-crontab/
http://tm.root-n.com/unix:command:git:cron_git_push
http://nyangryy.hatenablog.com/entry/2013/11/12/175408

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

gitignore.io をコマンドラインより利用しよう

前提 gitとは

バージョン管理(変更管理)システム

https://tcd-theme.com/2019/12/what-is-git.html

前提 .gitignoreとは

gitによるファイルの変更の管理の中には含めたくないファイルがある場合、.gitignoreファイルを作りその中にファイル名を書いておくと、そのファイル(フォルダ)は無視してくれる。

.gitignoreについて

前提 gitignore.ioとは

様々な開発の場面で、典型的に.gitignoreに含めた方がいいファイル・フォルダをリストアップし表示してくれるサイト。コマンドライン ツールも用意されている。

.gitignoreを自動的に作る(gibo, gitignore.io を使う)

コマンドラインよりgitignore.ioを使う

コマンドラインツールインストール(macの場合)

https://docs.gitignore.io/install/command-line

echo "function gi() { curl -sL https://www.toptal.com/developers/gitignore/api/\$@ ;}" >> \
~/.bash_profile && source ~/.bash_profile

やっていることは単純で、bash_profileにgiというコマンドを追加している。
giコマンドでは、引数で入力した単語をURLの末尾に付け加え、curlコマンドを叩きURLから.gitignoreのデータを持ってくるようである。
また、source ~/.bash_profileを叩くことで、bash_profileへの変更を即座に反映している(ターミナルを一度閉じて開き直さなくても、直ちにgiコマンドを使用可能にしている)。

実行例

https://docs.gitignore.io/use/command-line

プロジェクトフォルダに移動した後、例えば以下のようなコマンドを叩く。

gi linux,java >> .gitignore
gi Xcode,CocoaPods,Carthage,fastlane,Swift,SwiftPM,SwiftPackageManager,Objective-C >> .gitignore
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

git add .した後にgit statusするとChanges not staged for commit:と出る時の対処法

内容

GitHubにcommitしようと思いgit add . をしてgit status で確認したところ、"Changes not staged for commit:"と出てうまく反映されてなかった

実際出たエラー内容

$ git add .
$ git status
On branch login
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   app/controllers/users_controller.rb
    modified:   db/mysql/volumes/ib_logfile0
    modified:   db/mysql/volumes/ibdata1
    modified:   db/mysql/volumes/ibtmp1
    modified:   db/mysql/volumes/myapp_test/users.ibd
    modified:   db/mysql/volumes/mysql/innodb_index_stats.ibd
    modified:   db/mysql/volumes/mysql/innodb_table_stats.ibd
    modified:   spec/requests/users_signup_spec.rb

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   db/mysql/volumes/ibdata1

解決方法

このエラーの場合"db/mysql/volumes/ibdata1"がうまくステージされてないよと言われているので,ファイル名を指定してgit addコマンドを実行する

$ git add db/mysql/volumes/ibdata1
$ git status
On branch login
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   app/controllers/users_controller.rb
    modified:   db/mysql/volumes/ib_logfile0
    modified:   db/mysql/volumes/ibdata1
    modified:   db/mysql/volumes/ibtmp1
    modified:   db/mysql/volumes/myapp_test/users.ibd
    modified:   db/mysql/volumes/mysql/innodb_index_stats.ibd
    modified:   db/mysql/volumes/mysql/innodb_table_stats.ibd
    modified:   spec/requests/users_signup_spec.rb

ちゃんと反映されました!

最後に

コミットはこまめに行うので、エラーが出たら焦らず対処していきたいです。

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

SSHの秘密鍵,公開鍵の作成【Mac】

秘密鍵の作成

ターミナル を開いて以下のコマンドを実行します。

% ssh-keygen

このコマンドを実行すると

The key's randomart image is:
+---[RSA 3072]----+
|       .o.. o=@**|
|        ooo. @BBB|
|       .o+o.oEB*O|
|       ..o +..=*=|
|        S o .. +o|
|                .|
|                 |
|                 |
|                 |
+----[SHA256]-----+

鍵が作成されます。

作成した鍵を登録する方法

右上のアイコンを押してプルダウンした項目の中から”Settings”を選択します。
1,SSH and GPG keys
2,New SSh key
の順で選択してください

スクリーンショット 2020-10-18 1.05.03.png

鍵が作成されたか確認
$ ls ~/.ssh
 id_rsa   id_rsa.pub   known_hosts

id_rsa.pub ->公開鍵
id_rsa ->秘密鍵
なので作成されてますね。

今回は公開鍵を使うので、テキストエディタで確認します。

id_rsa.pubの中身の確認
% vi ~/.ssh/id_rsa.pub

長い文字列が表示されたら
ssh-rsa〜localまでをすべてコピーして"Key"のブランクボックスに貼り付けする
スクリーンショット 2020-10-18 1.26.28.png
貼り付け後"Add SSH key"で発行する
スクリーンショット 2020-10-18 1.29.36.png

公開鍵の登録完了!

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