- 投稿日:2020-02-24T20:57:29+09:00
Gitコマンド
はじめに
Gitコマンドの整理。
★適宜更新中★
Gitコマンド
導入操作編
# 使い方の確認 git git help git help -a #全コマンドリスト git help [コマンド名] git [コマンド名] --help # バージョン確認 git --version # ファイルリストの表示 git ls-files # ファイルの詳細確認 [Q]で中止 git blame master README.txt git blame [ブランチ名] [ファイル名] # コミット履歴 [Q]で中止 git log --oneline設定編
# ユーザー情報設定 git config --global user.name "Your Name" git config --global user.email "hoge@hoge" # ユーザー情報確認 git config --global user.name git config --global user.email git config --list # 全設定を表示 # 設定の削除方法 git config --global --unset [Key名]共通操作編(Gitに限らず)
# CurrentDirectoryの確認 pwd # ファイルリスト表示 ls # ディレクトリ作成 mkdir [ディレクトリ名] # ディレクトリ移動 cd [ディレクトリ名] # ファイル/ディレクトリ削除 rm -r [ディレクトリ名] # 履歴の表示 historyリポジトリ作成
# リポジトリ作成 git init # ステータス確認、リポジトリの状態を見る git status # ファイルをリポジトリに追加 git add [ファイル名] # コミットする git commit -m "メッセージ" # コミット情報を確認する git log git log --stat #コミットを構成しているファイルを見るGit GUI 関連
#git GUI 起動 git gui git citool #git log viewer 起動 gitk
- 投稿日:2020-02-24T20:33:45+09:00
リモートリポジトリのURLを変更する
GitHub実践入門 ~Pull Requestによる開発の変革 (WEB+DB PRESS plus) という書籍を勉強中に、沼にハマったので記述しておきます。
GitHubをいじっている間に(何らかの原因があるはずなのですが)、リモートリポジトリのURLを変えてしまい、ぐちゃぐちゃで無効なURLとなってしまい、正しいリモートリポジトリにpushしようにも、意図しないリモートリポジトリのURL先にpushしてしまう事態に陥りました。
remote: Repository not found. fatal: repository 'https://tomoki33kurita:tomoki8813@github.com/tomoki33kurita/Hello-world.git/' not foundと怒られていました。そこで、
~ $ git remote -vをしてみると、
origin https://tomoki33kurita:tomoki8813@github.com/tomoki33kurita/Hello-world.git (fetch) origin https://tomoki33kurita:tomoki8813@github.com/tomoki33kurita/Hello-world.git (push)が表示されます。これらはどうやら、
.gitconfigというファイルの
[remote "origin"] url = https://tomoki33kurita:tomoki8813@github.com/tomoki33kurita/Hello-world.gitという部分を変更すると直るようです。
[remote "origin"] url = https://github.com/tomoki33kurita/git-tr.git正しいURLに修正することができました。
- 投稿日:2020-02-24T20:05:52+09:00
Githubが草を生やしてくれなくなった
バイト先で同じチームのリードエンジニアの方に
「毎日Githubに草を生やす気概はあるか。」
問われ、黙り込んでしまった。今日から毎日Githubに草生やすぞ!
と意気込み、Githubに新規作成したリポジトリへpushした矢先に事件は起きた。
草が生えない。。。
これまで機嫌よく草を生やしてくれていたGithubの急な反抗に戸惑いつつも、しっかりと対応した。
(注 : 草とはGithubにおけるコントリビューションのことです。)
← これ草を生やしてくれる条件
色々調べてみたところ、Githubには草を生やす(コントリビューションが反映される)条件というものがしっかりと決まっているようでした。
以下の三つは草を生やすための絶対条件で、
①コミットに使用されるメールアドレスがGitHubアカウントと連携されていること ②フォークされたリポジトリではなく、独立したリポジトリでコミットされること ③デフォルトブランチもしくはProject Pages sitesでのコミットであることさらに以下のうちどれか一つの条件を満たす必要があるみたいです。
⑤リポジトリの参加者もしくはリポジトリを所有しているチームのメンバーであること. ⑥フォークされたリポジトリを持っていること ⑦リポジトリにオープンなプルリクエストまたはイシューを持っていること ⑧スターをつけられたリポジトリを持っていること。*Project Pages sites : Githubが提供する静的なウェブページをホスティングするサービス
③にもあるように、ブランチを切って作業しているコミットは反映されないようです。切ったブランチがデフォルトブランチにマージされることでやっとコントリビューションに反映されるらしい。
しかし今回の場合、
そもそも自分で作ったリポジトリのデフォルトブランチ(master)にcommitしていたので、疑われる部分は①の、コミットに使用されるメールアドレスがGitHubアカウントと連携されていること
の部分だけだったため、ここを調べてみることにした。
Githubは本当に自分を認識してくれているのか?
Githubと自分のメールアドレスが紐づいているかどうかをチェックできる方法があるようだったので以下の方法調べてみた。
1、まずcommitsの一覧画面から該当コミット(草を生やして欲しかったコミット)をクリックしurlを開く。
2、urlの語尾に
.patch
を付け足し読み込み。するとコミットの情報がでてきます。
この画面の一番上のほうにある、 FROM と書いてある部分にGithubに登録しているメールアドレスが記載されていないといけないみたいだったのですが、これがありませんでした。なんならコミットしているアカウントが個人のものではなく、バイト先で使用しているものになっていたこともここで判明しました。
なので、ターミナルで以下の実行をしてアカウント名とメールアドレスそれぞれ自分のアカウントのものに変更する。
$ git config –global user.name "アカウント名"$ git config –global user.email "Githubに登録しているメールアドレス"これで再びプッシュすると、ちゃんと草を生やしてくれるようになりました。
バイト先で使用しているアカウントと自分のアカウントを行ったり来たりしていたのが原因だったみたいです。
アカウントのアバター画像も全然違うのにコミット一覧をみた時にさえ気づかなかった自分が一番自分を認識できていなかった、
Githubのせいにしてしまってすみませんでした。
- 投稿日:2020-02-24T14:24:09+09:00
さくらVPS Cent OS7.7 でGitを最新バージョンに上げた
さくらのVPSにRails環境を構築しているのですが、
そういえばCent OSってデフォルトのGitのバージョンが低かったような。git --version git version 1.8.3.1そのため最新バージョンにします。
既存のgitの削除
sudo yum remove gitリポジトリの登録
sudo yum -y install https://centos7.iuscommunity.org/ius-release.rpmデフォルトリポジトリから外す
vi /etc/yum.repos.d/ius.repo [ius] name = IUS for Enterprise Linux 7 - $basearch baseurl = https://repo.ius.io/7/$basearch/ enabled = 0 #ここを1から0に変える repo_gpgcheck = 0 gpgcheck = 1 gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-IUS-7最新バージョンをインストール
sudo yum install git --enablerepo=ius --disablerepo=base,epel,extras,updatesエラーが出たので、
エラー: パッケージ: git222-2.22.2-1.el7.ius.x86_64 (ius) 要求: libsecret-1.so.0()(64bit) エラー: パッケージ: git222-core-2.22.2-1.el7.ius.x86_64 (ius) 要求: libpcre2-8.so.0()(64bit)下記を実行
sudo yum install lib-secret sudo yum install git --enablerepo=ius --disablerepo=base,epel,extras,updates • • • エラー: パッケージ: git222-core-2.22.2-1.el7.ius.x86_64 (ius) 要求: libpcre2-8.so.0()(64bit)git222周りのエラーが消えない
やったこと
sudo yum --enablerepo=ius list git222 #インストールできるか sudo yum install git222 --enablerepo=ius git --version git version 2.22.2とりあえずバージョンは上がったので様子見してみる。
- 投稿日:2020-02-24T10:34:10+09:00
Visual Studio CodeのGit関連プラグイン
これはなに?
昨年から使っているVisual Studio Codeの拡張機能の簡単な紹介になります。プログラミングに関するものではなく、ツールについてのお話です。
今回は、Git関連の拡張機能を取り上げます。
Git Graph
エディタ上でGitのリポジトリのグラフ(リポジトリツリー)を可視化してくれる拡張機能です。
また、同じ画面上から、履歴を参照したりマージをしたり、チェリーピックを作成したりと、様々なアクションができるようになっています!
- Marketplace: Git Graph
- GitHub Repository
あって嬉しい!
わたしはVisual Studio Code (以下VSCode)以前は、GitのツールとしてはSourceTreeを良く使っていました。
エディタとは別になってしまっていても、リポジトリグラフが見やすかったことや、画像の対比が出来たことが大きな理由です。ただ、わたしの環境だけかもしれませんが、安定稼働に難点があり、最近は使わなくなってしまいました。
その後はコマンドラインでの操作が中心になりましたが、やはり時々リポジトグラフが見たくなります。
このため、tig というコマンドラインのインタフェースを使っていました。さて、そんなおり、ふと拡張機能で何かいいものが無いかしら...と探してみたら、Git Graphというバッチリのものが!
早速入れてみたら、とっても良い感じでした。こんなところがよかった!
- とにかく動作が軽快な気がします!
- ローカルのリポジトリだけでなく、リモートリポジトリも切り替えて表示可能
- 絞り込みができる
- 色やタグが見やすい
また、グラフだけじゃなく、なにげなく右クリックやアイコンをクリックすると、期待を裏切らず色々な操作が出来るようになっています。
- Cherry pickする
- 差分を見る
- マージする
などなど。
かなり軽いのですが、これだけの情報、さらにリモートリポジトリの表示切り替えやpush / pullももちろん出来るので、どんな通信が発生しているのかとても気になるところ。
ソースを読んで理解するレベルには全然追いつけていませんが、Wiresharkで通信を見てみると、確かにGitHub側のAPIとのやりとりが発生しているのが分かります。
(実際の通信は暗号化されるので、ここではTLSのハンドシェイクで確認したもので代用)APIを使って情報を集約し、これだけの画面が作れるなんて、凄いですね!
いつかソースからビルドしてデバッグしながら通信を眺めてみたいです。GitLens
2つめはGitLensです。
ソースコード上の各行に対して、誰がいつコードを変更したかを表示してくれます。(邪魔にならないように!)
- Marketplace: GitLens
- GitHub Repository
こんなところがよかった!
- これも操作が軽いです!
- 個人リポジトリではなく、仕事でみんなで作業しているリポジトリでとても助かります!
- 過去の誰かが作ってくれたコードを修正する時
- アラートのお当番で例外が発生したコードがいつごろ変更されたのかを確認する時
カーソルを合わせた行の右側にうっすらとAuthorや修正日が表示されます。
すばらくするとポップアップが出て、そこから差分を確認したり、ブランチを切り替えたりといったことが出来ます。特に、コードの調査から始めるときにとても便利です!
GitHub Pull Requests
こちらはMicrosoftが提供している、VSCode上でプルリクエストを参照したり更新できる拡張機能です。
- Marketplace: GitHub Pull Requests
- GitHub Repository
こんなところがよかった!
- プルリクエストの一覧が左側に表示されます
- 通知では見落としていたプルリクエストにも気づいたり...
- ブラウザを開かずにVSCodeからプルリクエストを作成したり、更新したりできること
この拡張機能に関しては、わたしのTweetを載せておきます。
ふと「#VSCode から直にプルリク作成できるんだっけ?」と思って試してみた
— たかのあきこ@freeCodeCamp攻略中 (@akiko_pusu) December 7, 2019
ローカルの作業ブランチ展開→GitHub拡張から+ボタンを押す。
マージしたいブランチを指定し、プルリクのタイトルとしてコミットログかブランチ名、もしくはタグを選択。
Enterするとプルリクが出来たよ? pic.twitter.com/xN35O1mNrf#VSCode から直に作成したプルリクも、もちろん同じ画面で見ることができます。
— たかのあきこ@freeCodeCamp攻略中 (@akiko_pusu) December 7, 2019
ついでに、エディタ内のプレビュー画面からMarkdownでプルリクの本文を書き換えてみたら、ちゃんと更新反映された!
さすがElectronのフレームワーク使ってるって感じがする。 pic.twitter.com/OByb5b8IoW#VSCode 続き。ちょうど簡単な修正があったのでプルリク作成から詳細追記、マージ、ブランチ削除までエディタ内でやってみました!
— たかのあきこ@freeCodeCamp攻略中 (@akiko_pusu) December 7, 2019
ブランチ削除のボタンを押すと、画面上にローカル&リモートブランチを合わせて消せるダイアログが出てきた。助かるー! pic.twitter.com/qhrJRQ3eiMまとめ
Visual Studio Codeの拡張機能は本当にたくさんで、楽しいものが多いですね!わたし自身は作れはしないので、ひたすらこういったものを作れる方を尊敬してしまいます。
もちろんソースコードは公開されているので、少しずつ覚えていけたらなあと感じています。また、良い拡張機能に会ったら、ぜひ星やコメントを添えてあげていただけると嬉しいです!
- 投稿日:2020-02-24T01:23:30+09:00
【これで完璧】githubにsshで接続する
githubにsshで接続したいだけなのになぜこんなに時間がかかる。
なのでもう迷わなくて済むようにまとめました。私の環境
- macOS Catalina 10.15.2
前提
- すでにgithubアカウントを持っている
- すでにssh、gitがインストールされている(macにはデフォルトで入っているので問題ないと思うが)
1. ssh-keyを保管するディレクトリを作成する
何も指定しないと
~/.ssh/
直下に作成することになる。
しかし、複数のssh-keyを管理することを考慮すると個人的にはディレクトリを分けたい感がある。
なので今回は~/.ssh/github/
直下にkeyを生成する。% cd ~/.ssh/ .ssh % mkdir github .ssh % ls githubできた
2. ssh-keyを生成する
この通りオプションを指定しておくと
chmod
コマンド等で後からkeyの権限を変更しなくて済む。
your_email@example.com
をご自身のgithubのメールアドレスにしてください。% ssh-keygen -t rsa -b 4096 -C 'your_email@example.com' Generating public/private rsa key pair.次に、1.どこに、2.どんな名前で生成するか聞かれる。
何も指定しないと(そのままreturn/enterを押すと)1.~/.ssh
直下に、2.id_rsa
という名前で生成される。
しかし、複数のssh-keyを管理することを考えると個人的には特定の名前をつけたい感がある。
なので今回は、1.~/.ssh/github/
直下に、2.github_rsa
という名前で生成する。
/Users/you/.ssh/github/github_rsa
のyou
はご自身のマシンの名前にしてください。Enter file in which to save the key (/Users/you/.ssh/id_rsa): /Users/you/.ssh/github/github_rsa続いて、パスワードを聞かれる。
何も指定しないと(そのままreturn/enterを押すと)パスワードなしでssh-keyが生成される。
しかし、なんとなくパスワードを指定したい感がある。
なので今回はパスワードを指定する。Enter passphrase (empty for no passphrase): # パスワードを打ってenter/returnを押す Enter same passphrase again: # もう一度入力する +---[XXX 0000]----+ | | | | | なんか | | キラキラ | | した | | やつ | | *.*B. . | | | | | +----[XXX000]-----+できた
3. 本当にkeyが生成されたか確認する
% cd ~/.ssh/github github % ls github_rsa github_rsa.pubありそう
% ls -al | grep github -rw------- 1 you staff 1234 Feb 23 22:58 github_rsa -rw-r--r-- 1 you staff 567 Feb 23 22:58 github_rsa.pubやはりありそうなのでおk
権限はssh-keygenしたときにオプションで指定したため問題なし4. ssh-agentに作成したkeyを登録する
念のためssh-agentが動いているか確認する
% eval "$(ssh-agent -s)" Agent pid 63237動いてるのでおk
% ssh-add /Users/you/.ssh/github/github_rsa Enter passphrase for /Users/you/.ssh/github/github_rsa: # 2.で指定したパスワードを入力 Identity added: /Users/you/.ssh/github/github_rsa (your_email@example.com)できた
5.
~/.ssh/config
の設定% vim ~/.ssh/config~/.ssh/configHost github.com HostName github.com # このまま IdentityFile ~/.ssh/github/github_rsa # keyのpathを指定する IdentitiesOnly yes # IndentityFileで指定したpathのkeyのみを参照するため TCPKeepAlive yes # 接続中に操作せずに数分放置してもsshが切断されないようにするため AddKeysToAgent yes # 接続時に毎回パスワードを求められないようにするため UseKeychain yes # 接続時に毎回パスワードを求められないようにするため User git # このまま6. github側での設定
6.1 githubにいく前に生成したkeyをclipboardにコピーしておく
% pbcopy < ~/.ssh/github/github_rsa.pub6.2 githubにログインして新規sshを追加する
本ステップはこの記事(GitHubにssh接続できるようにする)の
GitHubに公開鍵を設定する
のセクションを参考にやる。
6.1でコピーしたkeyをペーストする。7. 接続を確認する
% ssh -T git@github.com Hi your_github_name! You've successfully authenticated, but GitHub does not provide shell access.できた
8. git configも設定する
8.0 前提知識
gitの設定ファイルは3種類ある
種類 影響範囲 ファイルのpath 備考 system システム全体、全ユーザの全リポジトリ /etc/gitconfig
- global 当該ユーザの全リポジトリ ~/.gitconfig
HOME直下 local 特定のリポジトリのみ 特定のリポジトリのpath/.git/config
指定したリポジトリ直下の .git
今回はglobalで設定を行う
8.1
~/.gitconfig
の設定% git config --global user.name 'your_github_user_name' % git config --global user.email your_email@example.com8.2 確認する
% vim ~/.gitconfig[user] name = your_github_user_name email = your_email@example.comできてる
これでも確認できる% git config --list user.name=your_github_user_name user.email=your_email@example.comできてる
参考
GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~
お前らのSSH Keysの作り方は間違っている
GitHubにSSH認証で接続する
【Github, SSH】SSH鍵を作成し、Githubへそれを登録する手順
gitのssh接続に使用する~/.ssh/configの設定について
Gitの設定をgit configで確認・変更
gitとsshのconfigについて(備忘録)
- 投稿日:2020-02-24T00:07:59+09:00
MATLABでGitを操作しよう (第4回 : ブランチ作成)
引き続きMATLAB GUIによるGit操作の第4回目
作成環境 MATLAB R2019b
第1回 : プロジェクト作成とGUIの説明
第2回 : git add/git commit
第3回 : チェックアウト "特定のコミットに戻る"
第4回 : ブランチ作成
第5回 : リモートリポジトリとの連携 (git push/git pull)
第6回 : クローンを作成する
第7回 : 応用1
第8回 : 応用2ブランチ作成
前回までのプロジェクトには、foo.mとgoofy.mというファイルがGitの管理下であり、プロジェクトの管理対象でした。そこで、次は新しい機能としてsloth.mを別ブランチの中で作っていきます。
図で示すと以下の様になります。ブランチの作成手順
新規ブランチで開発
プロジェクトウィンドウで「現在のブランチ」がfeature_1となっていることを確認します。
sloth.mを「プロジェクトに追加」します。第1回でも説明したように、この操作はgit add
に相当します。
ファイル編集
fearture_1ブランチにて
sloth.mを1回編集し、コミットします
masterブランチにチェックアウト
ブランチボタンをクリックし、masterブランチにチェックアウト(切り替え)します。
sloth.mはmasterブランチから切り離されたブランチで開発されているので、フォルダから見えなくなります。
ブランチ状態の確認
ブランチボタンをクリックし、ブランチとして「すべて」を選択します。すると、feature_1ブランチが分岐し、sloth.mがコミットされていることがわかります。
ブランチのMerge
sloth.mの開発が完了したと仮定し、master <= feature_1にMergeします。
1. ブランチでmasterを選択し、「切り替え」をクリック
2. 現在のブランチの名前がmasterになっていることを確認
3. 「マージ」ボタンをクリック
ブランチのMerge 完了
「マージ」ボタンをクリックすると、分岐していたfeature_1がmasterに接続されたことがわかります。
プロジェクトAPI紹介
ここまでで今回の記事は終了ですが、関連APIとしてを1つ紹介します。
新規追加したsloth.mのファイルステータスを取得してみたいと思います。
プロジェクト管理下では、「プロジェクトオブジェクト」というオブジェクトで管理下のファイルステータスや、バージョン管理ツールとの連携状況を見ることが出来ます。
オブジェクトの返り値をmyPrjとするとmyPrj = currentProject myPrj = Project のプロパティ: Name: "gitPrj1" SourceControlIntegration: "Git" RepositoryLocation: "リモート origin が指定されていません;" SourceControlMessages: [1×3 string] ReadOnly: 0 TopLevel: 1 Dependencies: [1×1 digraph] Categories: [1×1 matlab.project.Category] Files: [1×3 matlab.project.ProjectFile] Shortcuts: [1×0 matlab.project.Shortcut] ProjectPath: [1×1 matlab.project.PathFolder] ProjectReferences: [1×0 matlab.project.ProjectReference] StartupFiles: [1×0 string] ShutdownFiles: [1×0 string] Description: "" RootFolder: "T:\Qiita\gitPrj1" SimulinkCacheFolder: "" SimulinkCodeGenFolder: "" ProjectStartupFolder: "T:\Qiita\gitPrj1"myPrj.Files(3) ans = ProjectFile のプロパティ: Path: "T:\Qiita\gitPrj1\sloth.m" Labels: [1×1 matlab.project.Label] Revision: "" SourceControlStatus: Unmodifiedと言った具合に、sloth.mは変更されていない事がプロジェクトオブジェクトのプロパティ値から判定ができます。
APIドキュメント
currentProject