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

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
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

リモートリポジトリの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に修正することができました。

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

Githubが草を生やしてくれなくなった

バイト先で同じチームのリードエンジニアの方に
「毎日Githubに草を生やす気概はあるか。」
問われ、黙り込んでしまった。

今日から毎日Githubに草生やすぞ!

と意気込み、Githubに新規作成したリポジトリへpushした矢先に事件は起きた。

草が生えない。。。

これまで機嫌よく草を生やしてくれていたGithubの急な反抗に戸惑いつつも、しっかりと対応した。

(注 : 草とはGithubにおけるコントリビューションのことです。)
ダウンロード.png ← これ

草を生やしてくれる条件

色々調べてみたところ、Githubには草を生やす(コントリビューションが反映される)条件というものがしっかりと決まっているようでした。

以下の三つは草を生やすための絶対条件で、

①コミットに使用されるメールアドレスがGitHubアカウントと連携されていること
②フォークされたリポジトリではなく、独立したリポジトリでコミットされること
③デフォルトブランチもしくはProject Pages sitesでのコミットであること

さらに以下のうちどれか一つの条件を満たす必要があるみたいです。

⑤リポジトリの参加者もしくはリポジトリを所有しているチームのメンバーであること.
⑥フォークされたリポジトリを持っていること
⑦リポジトリにオープンなプルリクエストまたはイシューを持っていること
⑧スターをつけられたリポジトリを持っていること。

*Project Pages sites : Githubが提供する静的なウェブページをホスティングするサービス

③にもあるように、ブランチを切って作業しているコミットは反映されないようです。切ったブランチがデフォルトブランチにマージされることでやっとコントリビューションに反映されるらしい。

しかし今回の場合、
そもそも自分で作ったリポジトリのデフォルトブランチ(master)にcommitしていたので、疑われる部分は①の、

コミットに使用されるメールアドレスがGitHubアカウントと連携されていること

の部分だけだったため、ここを調べてみることにした。

Githubは本当に自分を認識してくれているのか?

Githubと自分のメールアドレスが紐づいているかどうかをチェックできる方法があるようだったので以下の方法調べてみた。

1、まずcommitsの一覧画面から該当コミット(草を生やして欲しかったコミット)をクリックしurlを開く。

2、urlの語尾に .patch を付け足し読み込み。

するとコミットの情報がでてきます。
この画面の一番上のほうにある、 FROM と書いてある部分にGithubに登録しているメールアドレスが記載されていないといけないみたいだったのですが、これがありませんでした。

なんならコミットしているアカウントが個人のものではなく、バイト先で使用しているものになっていたこともここで判明しました。

スクリーンショット 2020-02-24 19.46.59.png

なので、ターミナルで以下の実行をしてアカウント名とメールアドレスそれぞれ自分のアカウントのものに変更する。

$ git config –global user.name "アカウント名" 
$ git config –global user.email "Githubに登録しているメールアドレス" 

これで再びプッシュすると、ちゃんと草を生やしてくれるようになりました。

バイト先で使用しているアカウントと自分のアカウントを行ったり来たりしていたのが原因だったみたいです。

アカウントのアバター画像も全然違うのにコミット一覧をみた時にさえ気づかなかった自分が一番自分を認識できていなかった、
Githubのせいにしてしまってすみませんでした。

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

さくら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

とりあえずバージョンは上がったので様子見してみる。

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

Visual Studio CodeのGit関連プラグイン

これはなに?

昨年から使っているVisual Studio Codeの拡張機能の簡単な紹介になります。プログラミングに関するものではなく、ツールについてのお話です。

今回は、Git関連の拡張機能を取り上げます。

Git Graph

エディタ上でGitのリポジトリのグラフ(リポジトリツリー)を可視化してくれる拡張機能です。
また、同じ画面上から、履歴を参照したりマージをしたり、チェリーピックを作成したりと、様々なアクションができるようになっています!

あって嬉しい!

わたしはVisual Studio Code (以下VSCode)以前は、GitのツールとしてはSourceTreeを良く使っていました。
エディタとは別になってしまっていても、リポジトリグラフが見やすかったことや、画像の対比が出来たことが大きな理由です。

ただ、わたしの環境だけかもしれませんが、安定稼働に難点があり、最近は使わなくなってしまいました。

その後はコマンドラインでの操作が中心になりましたが、やはり時々リポジトグラフが見たくなります。
このため、tig というコマンドラインのインタフェースを使っていました。

さて、そんなおり、ふと拡張機能で何かいいものが無いかしら...と探してみたら、Git Graphというバッチリのものが!
早速入れてみたら、とっても良い感じでした。

こんなところがよかった!

  • とにかく動作が軽快な気がします!
  • ローカルのリポジトリだけでなく、リモートリポジトリも切り替えて表示可能
  • 絞り込みができる
  • 色やタグが見やすい

git-graph.jpg

また、グラフだけじゃなく、なにげなく右クリックやアイコンをクリックすると、期待を裏切らず色々な操作が出来るようになっています。

  • Cherry pickする
  • 差分を見る
  • マージする

などなど。

git-graph-2.jpg

かなり軽いのですが、これだけの情報、さらにリモートリポジトリの表示切り替えやpush / pullももちろん出来るので、どんな通信が発生しているのかとても気になるところ。

ソースを読んで理解するレベルには全然追いつけていませんが、Wiresharkで通信を見てみると、確かにGitHub側のAPIとのやりとりが発生しているのが分かります。
(実際の通信は暗号化されるので、ここではTLSのハンドシェイクで確認したもので代用)

git-graph-dump.jpg

APIを使って情報を集約し、これだけの画面が作れるなんて、凄いですね!
いつかソースからビルドしてデバッグしながら通信を眺めてみたいです。

GitLens

2つめはGitLensです。
ソースコード上の各行に対して、誰がいつコードを変更したかを表示してくれます。(邪魔にならないように!)

こんなところがよかった!

  • これも操作が軽いです!
  • 個人リポジトリではなく、仕事でみんなで作業しているリポジトリでとても助かります!
    • 過去の誰かが作ってくれたコードを修正する時
    • アラートのお当番で例外が発生したコードがいつごろ変更されたのかを確認する時

git-lens.jpg

カーソルを合わせた行の右側にうっすらとAuthorや修正日が表示されます。
すばらくするとポップアップが出て、そこから差分を確認したり、ブランチを切り替えたりといったことが出来ます。

特に、コードの調査から始めるときにとても便利です!

GitHub Pull Requests

こちらはMicrosoftが提供している、VSCode上でプルリクエストを参照したり更新できる拡張機能です。

こんなところがよかった!

  • プルリクエストの一覧が左側に表示されます
    • 通知では見落としていたプルリクエストにも気づいたり...
  • ブラウザを開かずにVSCodeからプルリクエストを作成したり、更新したりできること

この拡張機能に関しては、わたしのTweetを載せておきます。

まとめ

Visual Studio Codeの拡張機能は本当にたくさんで、楽しいものが多いですね!わたし自身は作れはしないので、ひたすらこういったものを作れる方を尊敬してしまいます。
もちろんソースコードは公開されているので、少しずつ覚えていけたらなあと感じています。

また、良い拡張機能に会ったら、ぜひ星やコメントを添えてあげていただけると嬉しいです!

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

【これで完璧】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_rsayouはご自身のマシンの名前にしてください。

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/config
Host 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.pub

6.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.com

8.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について(備忘録)

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

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を別ブランチの中で作っていきます。
図で示すと以下の様になります。

git4_2.png

ブランチの作成手順

  1. ブランチボタンをクリック
  2. ブランチ ダイアログの「ブランチとタグの作成」をクリック
  3. 新規 「ブランチ」を選択
  4. 名前欄に任意のブランチ名を設定 (今回はfeature_1)
  5. 「作成」ボタンをクリック git4_3.png

新規ブランチで開発

プロジェクトウィンドウで「現在のブランチ」がfeature_1となっていることを確認します。
sloth.mを「プロジェクトに追加」します。第1回でも説明したように、この操作はgit addに相当します。
git4_4.png

ファイル編集

fearture_1ブランチにて
sloth.mを1回編集し、コミットします
git4_5.png

masterブランチにチェックアウト

ブランチボタンをクリックし、masterブランチにチェックアウト(切り替え)します。
sloth.mはmasterブランチから切り離されたブランチで開発されているので、フォルダから見えなくなります。
git4_7.png

ブランチ状態の確認

ブランチボタンをクリックし、ブランチとして「すべて」を選択します。すると、feature_1ブランチが分岐し、sloth.mがコミットされていることがわかります。
git4_8.png

ブランチのMerge

sloth.mの開発が完了したと仮定し、master <= feature_1にMergeします。
1. ブランチでmasterを選択し、「切り替え」をクリック
2. 現在のブランチの名前がmasterになっていることを確認
3. 「マージ」ボタンをクリック
git4_9.png

ブランチのMerge 完了

「マージ」ボタンをクリックすると、分岐していたfeature_1がmasterに接続されたことがわかります。
git4_10.png

プロジェクト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

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