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

SalesforceXyTools For Sublime Support Git Command

SalesforceXytoolsForSublime is Rapid development tools for Salesforce Development.

From v2.1.7 Support git command , Github Wiki

SalesforceXyTools Support Git Command

github setting

Lable Command Description
git:version git --version
git:gui git gui
git:init git init
git:add git add ${input:git_add_file}
git:add:all git add --all
git:clone git clone ${input:git_url}
git:log:pretty git log ${git_log_format} --date-order
git:log:pretty:graph git log ${git_log_format} --date-order --graph
git:log:pretty:n git log -${input:git_log_number} ${git_log_format}
git:log:pretty:graph:n git log -${input:git_log_number} ${git_log_format} --graph
git:fetch:all git fetch --all
git:pull:all git pull --all
git:branch:list git branch ${select:git_branch}
git:branch:list_local git branch
git:checkout:branch_name git checkout ${input:git_branch_name}
git:checkout:new_branch_name git checkout -b ${input:git_branch_name}
git:branch:delete git branch --delete ${input:git_branch_name}
git:checkout:master git checkout master
git:tag git tag
git:status git status -s
git:log git log
git:log:stat git log --stat
git:log:search git log ${git_log_format} --grep "${input:keyword}"
git:log:tag git log ${input:tag} HEAD --pretty=format:%s
git:log:feature git log ${input:tag} HEAD --grep feature
git:log:follow git log --follow [file]
git:log:diff git log -p ${input:file}
git:log:5 git log -5 --pretty --oneline
git:shortlog git shortlog -sn
git:blame git blame ${input:file}
git:diff git diff
git:diff:cached git diff --cached ${input:file}
git:diff:head git diff HEAD
git:diff:branch:name-only git diff ${input:branch1}...${input:branch2} --name-only
git:diff:branch git diff ${input:branch1}...${input:branch2}
git:diff:today git diff --shortstat "@{0 day ago}"
git:diff:file git diff -- "${file}"
git:show git show
git:show:commit git show ${input:commit_id}
git:show:commit:name-only git show --name-only ${input:commit_id}
git:show:commit:filename git show ${input:commit}:${input:file}
git:commit:diff git diff ${input:commit1} ${input:commit2} --stat
git:reflog git reflog
git:commit git commit -m "${input:git_commit_message}"
git:remote:add:origin git remote add origin ${input:git_remote_url}
git:remote:verbose git remote -v
git:push:origin_to_master git push -u origin ${input:git_master}
git:stash:save git stash save "${input:git_statsh_message}"
git:stash:show git stash show ${input:git_statsh_name}
git:stash:show:p git stash show ${input:git_statsh_name} -p
git:stash:list git stash list
git:stash:apply git stash apply ${input:git_statsh_name}
git:stash:drop git stash drop ${input:git_statsh_name}
git:reset git reset HEAD .
git:reset:file git reset ${input:git_reset_file_or_dir}
git:config:open "${execPath}" .git/config
git:config:set git config ${select:git_config_key} ${input:git_config_val}
git:config:set:core.quotepath:false git config core.quotepath false
git:config:set:core.autocrlf:false git config core.autocrlf false
git:config:set:push.default:simple git config push.default simple
git:config:set:credential.helper:wincred git config credential.helper wincred

Useage

github setting

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

そろそろGUIじゃなくてCUIでgitを使ってみたい人向け講座

対象

Source Treeなどでgitの基本操作、用語をある程度理解している
CUIのgitに興味があるが、GUIに慣れているのもありなかなか移行できずにいる
(Windowsの場合は)git bashなどがインストールしてある、今からする予定

はじめに

 Source Treeがクラッシュして嘆いている後輩がいたので、「git bash使おう」と冗談っぽく助言してみましたが、せっかくなのでスムーズにCUIへ移行する助けをしようと思いこの記事を書いた次第です。CUIに興味があるけど、敷居が高いと感じたりしてCUIを使えずにいる人の助けになったらいいなぁと思います。

 さて、「git CUI 入門」のように検索すると色々な記事が出てきますし、いくつか覗いてみましたがそれらの記事は結構しっかりと書かれています。では、なぜこの記事を書くことにしたのか?それは私が最初に知りたいと思っていた知識を包括的に書いてくれている記事はなかったことと、基本的な使い方を分かった程度では最初は不便に感じるCUIに移行しようと思わないだろうという考えからです。私自身はできるだけCUIを使うべきだと考えていて、それは明らかにCUIで作業した方が早い場面が多いからです。基本操作を知った程度ではおそらく「慣れているGUIの方が作業が早いし、GUIで良いのでは?」と思うことでしょうし、実際その通りでしょう。なのでCUIを使う利点と、GUIよりも快適に扱うためのノウハウや設定まで少し触れていきます。まあ結局は慣れなので、なんとなく何をすればいいか分かったら、あとはとにかく使ってみることでどんどん使えるようになっていくはずです。そしてそのうちGUIよりCUIを好んで使うようになるはず。

CUI gitの基本 gitリポジトリを作る

前置きが長くなりましたが、本題となるgitコマンドの説明をしましょう。
とは言っても、gitリポジトリを作るのは超簡単です。gitで管理したいフォルダまでcdコマンドで移動して

$ git init

とやるだけです。

githubなどからクローンしてくるなら

$ git clone (githubなどのURL)

で終わりです。

gitに限った話ではないのですが、CUIはとにかくtabキーを押す癖を付けることで色々教えてくれるので、とてもフレンドリーになります。お使いのシェルや設定にもよりますが、「cd 」まで入力してtabを2回ほど押せば今そこにあるファイルをばーっと表示してくれるはずです。途中までコマンドが入力されていれば、tabキーを押すだけで残りを補完してくれます。全部キーボードで入力するのは完全に無駄な労力なのでtabを押しまくりましょう。MacやLinuxはbashなど優秀なCUI環境がデフォルトで使えるはずですが、コマンドプロンプトでは厳しいのでWindowsの人はgit bashを使いましょう。bash環境を用意してtabを押す、これだけで本当に世界が変わります。

CUI gitの基本 コミット編

当然ですが、やることはguiと変わりません。例を示してみます。

$ git status
$ git diff
$ git add .
$ git commit -m "bug fixed"
$ git push origin develop

この例では、変更されたファイルを全てまとめて"bug fixed"というメッセージをつけてコミットし、リモートのdevelopブランチにプッシュしています。

git pushはリモートブランチの話になるので後述します。

「git status」は変更のあったファイルを確認できます。「git diff」は変更した箇所を見れます。diffの使い方は色々あるので、詳しい使い方は別の記事におまかせしておきます。
「git add . 」はステージングです。gitはコミットしたいファイルとしたくないファイルを分けるために、ステージングしてからコミット、という流れがあるんでしたね。ステージングするとgit diffだけで差分を見れなくなるので注意してください。
「git add (ファイル名)」とすれば、そのファイルだけステージングすることができます。「git add .」とすると、変更されているファイルを全てステージングします。ファイルを分けたいことはそんなにないので、基本的には後者を使うことになるでしょう。
いま何がステージングされているかも「git status」で確認することができます。gitにおけるlsコマンドのようなものなので、こまめに確認しましょう。
間違えてステージングした!という場合は「git reset」でキャンセルできます。
ステージング以外にもgit resetで取り消せるものは色々あるので、それについて書かれた記事を読むと良いでしょう。


ステージングが終わったら、コミットです。基本は2つの方法を覚えればよいです。

$ git commit
または
$ git commit -m "コメント"

単に「git commit」と入力するとviが起動します。コミットメッセージを書き込んで保存することで、コミットされます。この記事の読者はCUIに慣れていない人を想定しているので、viの操作も書く必要がありますね。

最低限コミットメッセージを書くために覚えるべきviの操作はたった3つだけです。

  1. インサートモードにする
    "i"キーを押します。終わりです。
    ボタンを押すだけですが、日本語入力になってないかは気をつける必要があります。もし日本語で入力されていても落ち着いて対処しましょうね。慌てて変なところを押すとviが暴走してさらに大変なことになります。何度もやりました。
    インサートモードになると、普通に文字を入力できるので、notepadなどに書き込むようにさらさらっと書けます。
    通常、1行目はタイトル、2行目は空行、3行目以降に詳細な説明を書きます。1行目をあんまり長くすると後で表示が崩れて後悔するので気をつけた方がいいです。後悔しました。

  2. インサートモードを解除する
    コメントを書き終わったらESCキーを押します。終わりです。

  3. viを終了する
    ノーマルモードの状態(インサートモードじゃない最初の状態)で
    :wqと入力すると保存して終了=コミットされます。
    :q!と入力すると保存せず強制終了=コミットはされません。
    以上です。

ね、簡単でしょう?

「git commit -m "メッセージ"」とするとviを起動することなく、メッセージをつけてコミットできます。もっと簡単ですね。

ちなみにgit commitに-aというオプションがあり、そうすると変更を自動でコミットするのでgit addを省略できるのですが、新しく作ったファイルがコミットされてなかった!というミスが多発しまくる(経験談)ので初めは使わない方がよいです。-aオプションは各所で見かけるはずなので、効果は知っておきましょう。


ステージングしてコミットする基本な動きをするだけなら、極端に言えば「git add .」と「git commit -m "save"」を交互に使ってればいいというわけですね。同じコマンドを繰り返すということは、履歴が使えます。
作業中にちょっとキリが良くなったら、開きっぱなしにしているgit bashなどのウィンドウに切り替えて「↑↑Enter↑↑Enter」と格ゲーのコマンド感覚で入力するだけで、作業中のスナップショットの保存が簡単にできます。これなら慣れてなくてもGUIよりすばやく操作できるはず。これをやるとsaveとしか書かれてないコミットが大量に出てきますが、ある程度完成したところでちゃんとしたコメントを書いたコミットを作れば、重要な節目はちゃんと分かるので問題ないでしょう。気になるならあとでrebaseしてまとめられます。rebaseはそこそこめんどくさいのでこの記事では触れません。


CUI gitの基本 ブランチ編

ブランチを新しく作って、チェックアウトして、マージできるようになりましょう。
git-flowに関しては拡張機能もあるので興味があれば調べてみるとよいでしょう。

(developブランチを)作ってチェックアウトする

$ git branch develop
$ git checkout develop

checkoutでブランチを作りつつチェックアウトすることもできます。上と同じ操作を1つのコマンドで完結できるわけですね。ブランチを作るときはそのままチェックアウトしたい場合が多いはずなので、下記の方法を使うとスムーズです。

$ git checkout -b develop

「git checkout ブランチ名」と指定すればブランチを移動できます。もちろん履歴にある任意の位置にもハッシュ値を指定すれば移動できます。「git checkout ハッシュ値」とするだけです。

※↓コメント欄より追記

git-flowでチーム運用している場合などに、リモートにあるブランチを直接ローカルにも作りたい、という場面が結構あると思います。その場合は

$ git checkout -b hoge origin/hoge

でリモートにあるブランチをローカルへコピーできます。


新しいブランチ名をつけず「git branch」とだけ入力すると、ブランチの一覧が見れます。
*がついているのが今自分がいるブランチです。

$ git branch
* develop
  master

ブランチを消すときは-dです。

$ git checkout master(developブランチにいるとdevelopが消せないのでmasterへ移動)
$ git branch -d develop

branchをまとめます。
これらで何が起きるか理解できていればbranchコマンドの操作は大丈夫ですね。
間違えても-fオプションとかつけない限り致命的なことにはならないので安心して使いましょう。

$ git branch
$ git branch develop
$ git branch -d develop

上から 全ブランチの確認、新規ブランチの作成、ブランチの削除、です。


マージも、コマンドを使うだけなら簡単です。流れの例は以下です。※touchは空のファイルを作るunixコマンドです

$ git checkout -b develop
$ touch hoge.txt
$ git add .
$ git commit -m "test"

$ git checkout master
$ git merge develop
$ git branch -d develop

マージするときは「git merge (マージする相手のブランチ名)」です。事前に合流したいブランチへ移動することを忘れないようにしましょう。
マージすると、マージコミットのメッセージを書くためにviが起動します。

Merge branch 'develop'

# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.

こんな感じで最初からメッセージが書かれているはずです。特に追加説明が必要なければ、そのまま:wqと保存してやればマージ完了です。逆にマージをやめたいときは:q!とすれば中止できるのも同じです。
コンフリクトが起きた場合は……Source Treeなどを起動した方が楽かもしれませんね。私は慣れるまでそれで対処していました。

マージしただけではブランチは消えないので、ちゃんと消しておきましょう。ほとんどの場合、マージし終わった後の支流は必要なくなるはずです。他の人との作業の関係で消したあと必要になることもありますが、履歴に残っているので作り直せますから安心して消し飛ばしましょう。


ブランチ関連は例えば「de」まで入力してtab押したらdevelopに補完されるので(たまにハッシュ値が嫌な感じにブランチ名などと被ってしまい補完がうまく効かなくなることはあります。逆に言えば、ハッシュ値も一意に定まるところまで入力してtab押せば補完が効きます)、慣れればとてもスムーズにコマンド入力して作業を終えられます。gitの操作よりプログラミングに時間を割きたいですから活用していきましょう。

CUI gitの基本 リモート編

githubとかを使うときの設定です。
まずはリモートブランチのURLを設定します。

$ git remote add origin https://hogehoge...

おまじないのようにoriginを使っていたかもしれませんが、このoriginはサーバー(URL)につける名前のようなものです。普通はoriginが使われます。複数のサーバーにプッシュしたりする場合は当然別の名前で設定してやる必要があります。

$ git remote add github (githubのリポジトリURL)
$ git remote add gitlab (gitlabのリポジトリURL)

とすればgithubとgitlabの2つを使うことができます。意味があるかはさておき、覚えておいて損はないでしょう。
originの設定が必要になるのはgit initでゼロから作った場合で、git cloneでどこかから落としてきた場合はそのcloneしてきたリポジトリのURLがoriginとして設定されているのでこの操作は必要ありません。逆に言えば、cloneしてきたときに自動で設定される名前がoriginなので、自分で設定する場合もoriginを使うのがよいというわけです。
設定されているリモート一覧を確認するときは「git remote -v」です。

プッシュなどは今までのコマンドと同様に使うだけです。

git fetch origin
git pull origin
git push origin develop

originを省略したりもできるので、originと入力するのも億劫になるぐらいCUIに慣れてきたら調べてみてください。


CUIのgitを使いやすくしよう

ここまででgitの基本的な操作は説明できました。
次は使いやすくするために設定をしてみましょう。ということで私の.gitconfigを晒します。そんなにgitの設定にこだわってないので大したことないですが…

.gitconfig
[alias]
    tree = log --graph --all --format=\"%x09%C(cyan)%h%Creset%x09%C(green bold)%an%Creset %C(magenta bold)%d%Creset %s\"
    cho = checkout
    st = status
    br = branch
    co = commit
[core]
    autoCRLF = false
    quotepath = false
[merge]
    ff = false
[pull]
    ff = only
[difftool "sourcetree"]
    cmd = '' \"$LOCAL\" \"$REMOTE\"
[mergetool "sourcetree"]
    cmd = "'' "
    trustExitCode = true

※メールアドレスなどの設定は削除しています
※treeはどこかの設定をコピーして持ってきたはずなのですが、設定したのはもう何年も前なのでどこのものを使ったのかわからなくなってしまい引用元が書けませんでした。

.gitconfigはホームディレクトリに配置します。Windowsでは"C:\Users\ユーザー名"の位置ですね。「cd ~」で行ける位置です。


最初にあるエイリアス設定を使うときは、例えばtreeなら「git tree」と入力するだけです。git内でのエイリアスなので最初にgitはつける必要があります。treeの動作は見たほうが早いので実行結果をお見せしましょう。

個人開発だといい感じの履歴がなかったので、「git tree」をOpenSiv3Dのリポジトリで使ってみました。

image.png

視覚的にわかりやすく履歴を表示してくれます。
これならCUIでもなんとかgitを使えそうな気がしてきませんか?
「コミットメッセージの1行目は短くした方がいい」とだいぶ上の方で書いていたのを覚えているでしょうか?ここで表示が崩れてしまうからというわけですね。
また、コミット数が増えると当然縦に長くなります。1ページで収まらない場合は「q」を押すと終了できます。また、「-数字」で表示する行数を指定することもできます。

image.png

CUIなので、当然動作も非常に早いです。重いGUIアプリで確認する必要はないですね!


それ以外のエイリアスは単に文字入力を減らすものです。

    cho = checkout
    st = status
    br = branch
    co = commit

使用頻度が高いコマンド、checkoutなどは8文字も必要なのでめんどくさいです。本当にめんどくさい。死ぬほどめんどくさい。choなら3文字なので2倍以上の速度で入力が終わります。嬉しい。もう1文字でcとかにしてもいいですね。さらに3倍早くなりますよ。

という冗談はさておき、入力する文字数は快適性を高める上で極めて重要です。特にtabキーを連打して補完をガンガン使うようにすると、そもそもCUIでも文字を打つ量がだいぶ少ないのでこの些細な入力量の差が結構大きく感じられるようになってきます。私は競プロ以外で一文字変数は使いたくないので最低限の意味が読み取れる2字以上でエイリアスを作っていますが、速度だけを求めるなら1字も全然アリです。エイリアス設定はあなたの信念に従ってカスタマイズしてください。


[core]
    autoCRLF = false
    quotepath = false

autoCRLFは改行コード周りの設定です。改行コードはエディタ側で設定すべきではありますが、開発環境がWinとMacのマルチプラットフォームになってたりする場合はかなり重要な設定になりえます。宗派や所属しているプロジェクトの規約に応じて設定しましょう。
quotepathはfalseにすることで日本語のファイルがまともに表示されるようになります。ファイル名に日本語をつけたりすることの是非はともかく、表示設定ぐらいはしておく方が無難でしょう。


[merge]
    ff = false
[pull]
    ff = only

mergeがfast forwardになることを防ぎます。
ffになってしまうとマージしたときのメッセージが残せないので、どこでマージが起きたのかわからなくなります。すっきりした一本のツリーを好むなら設定する必要はありませんが、私はマージしたことをしっかり履歴に残したいので設定しています。つまりこれも宗派によりますね。設定なんてものはだいたい宗派次第です。git-flowの場合はfeature終了時に必ずマージコミットが残りますので、整合性をとるためにfalseに設定すべきでしょう。

逆に、pullしたときにffにならないのはそもそも何かがおかしいとき(少なくともgit-flow運用では不自然)なので、ff以外でpullされることを防ぐためにff=onlyとしています。これは全員つけておくべきでしょう。


いくつかオプションを紹介しましたが、最低でもgit treeだけでも使えるように設定しましょう。
ホームディレクトリに.gitconfigファイルを直接作成・変種してもいいですし、gitコマンドから設定することもできます。
st = status を設定する例:

$ git config --global alias.st status 

treeコマンドは長くてコマンドからやる方が大変なので(記事を書きつつ試しにやってみようとしたらエラー出した)~/.gitconfigを直接編集して貼り付けた方がたぶん簡単です。

設定に関する色々な情報はググればいくらでも出るので、お好みにカスタマイズしちゃってください。
その頃のあなたには、この記事は不要になっていることでしょう。

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

ローカル・リモートリポジトリのコミットのバージョンを戻す

はじめに

コードを書く→どんどんぐちゃぐちゃになる→もう嫌だ前の状態に戻したい、と思った時にやったことを書きます。

ローカルリポジトリのコミットのバージョンを戻す

1.まずはgit logで戻したいコミットのidを探す。

2.戻したいコミット以降のコミットを消す。
git reset --hard (コミットid)

[参考記事]
git resetに関してはこの記事がが分かりやすかったです。
[git reset (--hard/--soft)]ワーキングツリー、インデックス、HEADを使いこなす方法

リモートリポジトリのコミットのバージョンを戻す

1.リモートリポジトリのバックアップ用のリポジトリを作成する。
git push origin master:master_bak

2.リモートリポジトリのmasterブランチを削除する。
git push origin :master

注意
 githubのdefaultのブランチがmasterになっていれば削除できない。
 →その場合はgithubのbranch→change default branchボタンでmaster_bakを選ぶ。
 →その後、もう一度git push origin :masterで削除する。

3.ローカルリポジトリのmasterをpushする。
git push origin master

4.無事に戻せたかを確認する。

5.githubのdefault branchをmasterに変更して、バックアップを消す。
git push origin :master_bak

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

fatal: pathspec '.' did not match any filesの解決方法

久々にgitがいうことを聞かない

問題のコマンド

.gitignoreを変更したので、全ての管理ファイルに対して適用させたかったのでいつも通り以下のコマンドを打った。

# .gitignoreに定義したファイルがgit上から消え去るが、手元の環境には残るはずだった。
git rm -r --cached .
# エラー
fatal: pathspec '.' did not match any files

gitの管理対象になっていないファイルが存在するとダメっぽくてうまくいかないんだろうなぁと予想。

....お見事、的中しました。
https://qiita.com/pugiemonn/items/2f6af4467b33ed3f41b5

結果

git rm -r --cached --ignore-unmatch .

でとおった。

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

デプロイ時、gitのアップデート方法

※自分の保存用の記事になります。

$ git init

,

$ git add -A
$ git commit -m "[コメントここは自分が分かるように記述!]"
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

デプロイ時、gitの準備する方法

※自分の保存用の記事になります。

最初だけ!

$ git init

,
,
,
,
,

アップデートする時はここを行う!

$ git add -A
$ git commit -m "[コメントここは自分が分かるように記述!]"
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

EC2にgit、docker、docker-compose、pip、pythonコマンドをインストールする方法

EC2を立ち上げた際にやることを忘れがち&チームに共有としてメモしておきます。

準備まではQiitaの「(下準備編)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで」という記事がわかりやすかった。

コマンドのインストール

git

$ sudo yum install git

gitの連携方法は以下

# gotconfigを作成、編集
$ vi .gitconfig

[user]
  name = your_name
  email = hoge@hoge.com

# githubに公開鍵を登録するために公開鍵作成
$ chmod 700 ~/.ssh
$ cd ~/.ssh
$ ssh-keygen -t rsa

あとは、Github/Gitlabに公開鍵を登録してcloneするだけ。

docker

# yum の更新
$ sudo yum update -y

# yum から docker をインストール
$ sudo yum install -y docker

# docker サービスの起動
$ sudo service docker start

# ec2-user を docker グループに追加する
$ sudo usermod -a -G docker ec2-user

# ログインしなおして以下を実行しインストールされていることを確認
$ docker info

docekrコマンドをsudo無しで実行する場合は以下を実行

# dockerグループがなければ作る
$ sudo groupadd docker

# 現行ユーザをdockerグループに所属させる
$ sudo gpasswd -a $USER docker

# dockerデーモンを再起動する (CentOS7の場合)
$ sudo systemctl restart docker

# exitして再ログインすると反映される。
$ exit

docker-compose

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose --version 

他のリンクにしたい場合以下から探す

https://github.com/docker/compose/releases/

byobu

$ sudo yum update -y
$ wget https://launchpad.net/byobu/trunk/5.119/+download/byobu_5.119.orig.tar.gz
$ tar xzf byobu*.tar.gz
$ cd byobu-* && ./configure
$ sudo make && sudo make install

pip

$ curl -O https://bootstrap.pypa.io/get-pip.py
$ python get-pip.py --user # or python3

python

# 依存関係インストール
$ sudo yum install gcc zlib-devel bzip2 bzip2-devel readline readline-devel sqlite sqlite-devel openssl openssl-devel -y

# 本体インストール
$ pyenv install 3.6.5

# このOSで使用するPythonのバージョンを宣言
$ pyenv global 3.6.5

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