- 投稿日:2020-10-18T22:37:29+09:00
git rebaseの使い方
git rebaseとは
Git には、ブランチを統合するための方法がmergeとrebaseの2つあります。rebaseは、作業が完了したブランチを分岐元のブランチにくっつける時に使う機能です。mergeとの違いも含めて、rebaseについて解説していきます。
リベースを使うと何がいい?
ずばり、コミット履歴が綺麗になることです!!
より具体的には、
- コミット履歴が一直線になってわかりやすくなる
- 複数のコミットを一つに統合できる
などといったメリットがあります。
リベースはコミットが一直線になる
今、branchAとbranchBという2つのブランチがあるとします。
マージの場合
まずはmergeを使って、branchBへbranchAを取り込む場合を見ておきましょう。
git checkout branchB git merge branchAマージだとコミット履歴が枝分かれした後、合流するといった形になり、一直線にはなりません。
リベースの場合
では、branchBをbranchAにリベースしてみます。
git checkout branchB git rebase branchA同じ内容の別コミットC'、D'が指定したブランチの先から作られることで、一直線になります。
リベースは複数のコミットを1つのコミットにまとめられる
今、4つのコミットABCDを持つbranchがあるとします。
これら4つのコミットはそれぞれが微修正であるため、ひとまとめにしたいです。
そんなときは、rebaseの「-i」オプションを利用するといいです。
git checkout branch git rebase -i [ひとまとまりの直前のコミットのID]
「新規コミットE」として、指定した複数のコミットをまとめられました。リベースの注意点
綺麗で見やすいコミット履歴を作成するのに、とっても役立つリベースですが、注意点もございます。
それは、rebaseコマンドは処理を作り直してしまうため、既存のコミットへ影響を与えてしまうことです。
安易に使用すると、誰かのコミットを勝手に作り直すことになり、チームに混乱を招くことに繋がります。
pushして誰かの目に触れた処理や、他の人の手の入っている箇所では、rebaseでなくmergeを使用するようにしましょう。
そして、誰にも影響を与えないローカルの開発内容のみ、rebaseを使用するようにするといいと思います。
- 投稿日:2020-10-18T20:36:34+09:00
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
を実行して以下のコマンドを書き込みます。crontab0 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が実行されてないと
ターミナルで
私は以下のようなエラーが出ました。
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
- 投稿日:2020-10-18T11:48:02+09:00
gitignore.io をコマンドラインより利用しよう
前提 gitとは
バージョン管理(変更管理)システム
https://tcd-theme.com/2019/12/what-is-git.html
前提 .gitignoreとは
gitによるファイルの変更の管理の中には含めたくないファイルがある場合、
.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 >> .gitignoregi Xcode,CocoaPods,Carthage,fastlane,Swift,SwiftPM,SwiftPackageManager,Objective-C >> .gitignore
- 投稿日:2020-10-18T11:01:07+09:00
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ちゃんと反映されました!
最後に
コミットはこまめに行うので、エラーが出たら焦らず対処していきたいです。
- 投稿日:2020-10-18T01:33:51+09:00
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
の順で選択してください鍵が作成されたか確認$ 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"のブランクボックスに貼り付けする
貼り付け後"Add SSH key"で発行する
公開鍵の登録完了!