- 投稿日:2021-01-15T21:54:03+09:00
__git_ps1: command not found
事象 :
sh
と打ったらなんか言われるようになった。
- 環境 : Windows10 Pro バージョン1909
# なんか言われた ponsuke@tarou MINGW64 /c/git/git-repo (develop) $ sh sh: __git_ps1: command not found # 何しても言われるようになった・・・ブランチ名が表示されなくなってしまった・・・ ponsuke@tarou MINGW64 /c/git/git-repo $ cd .git sh: __git_ps1: command not found原因 : git_ps1コマンドが消失したから?
参考 : bash_completionで「-bash: __git_ps1: command not found」となった時の対処法 - くりにっき
対応 : Git Bashを再起動する
その画面を閉じてまた起動すれば大丈夫!
- 投稿日:2021-01-15T17:26:02+09:00
Gitアカウントを2つ使用して運用するには
はじめに
会社で使用している設定ファイルの中には個人的に使ってる設定ファイルも含まれているので、
そーいうのは個人的なアカウントのリポジトリで管理している。
このままだと会社のアカウントでPushされてしまうので、
このリポジトリのファイルは個人アカウントでコミットしたい。
みたいな設定の仕方の忘却録。まずは個人用アカウントへ繋ぐ為の公開鍵・秘密鍵を作成&設定
$cd ~/.ssh/{$個人アカウント用} $ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/Users/(username)/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again:今使用しているのとは別にしたいので、適当に名前つける。
一回目のタイミングで名前を指定する。
あとはEnter2回叩く。生成された公開鍵をGitHubに設定する。
この辺とか参考: https://qiita.com/0ta2/items/25c27d447378b13a1ac3sshのconfig設定について
vim ~/.ssh/configconfigが無ければ作成する。
Host {$社内用} HostName github.com IdentityFile ~/.ssh/{$社内用}/id_rsa User git Port 22 TCPKeepAlive yes IdentitiesOnly yes Host {$個人用} HostName github.com IdentityFile ~/.ssh/{$個人用}/{$新しく作ったKey名} User git Port 22 TCPKeepAlive yes IdentitiesOnly yesHostに適当に名前をつけて接続テスト。
ssh -T {$社内用} Hi {$社内用アカウント名} You've successfully authenticated, but GitHub does not provide shell access. ssh -T {$個人用} Hi {$個人用アカウント名} You've successfully authenticated, but GitHub does not provide shell access.テスト成功であればこんな感じにsuccessfullyと出る。
もし、接続失敗することがあれば、~/.ssh/known_hostsの中身を消して試してみる。gitconfigについて
まず、gitconfig設定には、システム全体
system
、ユーザー全体global
、個別リポジトリ用local
の3種類がある。
読み込み順は、system
→global
→local
の順に読まれるのでlocal設定があればlocalの設定が反映される。
各設定の確認は下記で行える。git config --system --list // gitをinstalしたディレクトリ git config --global --list // ~/.gitconfig git config --local --list // 対象リポジトリ内の .git/config社内用で使用しているのはglobal設定なのでこれはそのままにしておいて、
個人用リポジトリ内でのlocalの設定をしていく。// 任意の場所で git clone {$該当のリポジトリ} cd {$該当のリポジトリ}/.git vim configcloneしてきた
.git
内にあるconfig
がlocal設定ファイルになる。[user] name = 該当のユーザID email = 該当のメールアドレスこのlocal設定に個人用を追加しておく。
git config --local user.name "該当のユーザID" git config --local user.email "該当のメールアドレス"これでも名前とメールアドレスを追加出来る。
あと、このリポジトリのremoteの設定をしておかないとpush出来ないので設定する。
git config remote.origin.url git@github.com:[該当のユーザID]/[リポジトリ].gitこれで確認してみると@マーク以下が
github.com
になってので、
これだとssh config
で設定しているHostName
が2つ存在するので接続Errorになる。
ssh config
で設定した情報を元に@マーク以下を修正。git remote set-url origin git@[個人用ホスト名]>:[ユーザID]/[リポジトリ].git一旦、pushする前に
git log
などで確認しておくと良い。
社内用でpushする時は会社のアドレスで、個人のファイルを修正した時はlocal
で設定したものが反映される。
- 投稿日:2021-01-15T15:50:35+09:00
Gitコマンド【チートシート】
「忘れちゃっても実装できる仕組み」を作りたくて、基本的なgitコマンドをまとめました。
今後も長らくお世話になるものだと思うので、自分を含め他の人のお役に立てれば幸いです。
init【リポジトリの準備】
ディレクトリにリポジトリを作成.
$ git initベアリポジトリの作成
$ git init --bareグループ書き込み権限を有効にする.
$ git init --sharedremote 【リモートリポジトリの一覧】
リモートリポジトリの一覧表示
$ git remoteリモートリポジトリの追加
$ git remote add [username] [remote repository PATH]リモートリポジトリの名前変更
$ git remote rename [remoterepository] [new name]リモートリポジトリの情報を見る
$ git remote show [remote repository]リモートリポジトリで排除されたブランチをローカルからも削除
$ git remote prune [remote repository]fetch 【リモートリポジトリの情報のついかと更新】
リモートリポジトリの最新情報を追加
$ git fetch [remote repository]リモートリポジトリの削除情報をローカルに更新
$ git fetch --prunebranch【ブランチの操作】
現在のブランチの確認と、新しいブランチを作成
$ git branch &[new branch]すべてのブランチを確認
$ git branch -aリモートブランチを確認
$ git branch -rブランチを削除
$ git branch -d [branch]ブランチの名前を変更
$ git branch -m [branch] [new branchname]他のユーザーのブランチ、自分のブランチを関連付ける
$ git branch --set-upstream [my branch] [other branch]add 【インデックスに追加・登録する】
ファイルやディレクトリをインデックスに登録.
$ git add [filename]すべての変更を含むワークツリーの内容をインデックスに追加.
$ git add -A以前コミットしたことがあるファイルだけインデックスに追加.
$ git add -ucommit【コミットの操作】
インデックスに追加されたファイルをコミット
$ git commitコミットメッセージを添えてコミット
$ git commit -m “[comment]”新規を除く変更されたファイルをインデックスに追加してコミット
$ git commit -a直前のコミットを修正
$ git commit --amendstatus ファイルの変更を表示
前回のコミットと比較してどのファイルが変更されたかを表示.
$ git statuslog 【コミットログの操作】
コミットログを参照
$ git logコミットログの先頭7桁のコミットIDを表示
$ git log --onelineコミットログのHEADの位置を明示
$ git log --decorateコミットログを縦グラフで表示
$ git log --graph指定した文字がコミットログに含まれるコミットを表示
$ git log --grep [filter]diff 【差異を表示】
インデックスとワーキングツリーの差異を表示
$ git diffHEADとインデックスの差分を表示
$ git diff --cachedコミット間の差異を表示
$ git diff [commit id 1] [commit id 2]checkout
コミットされた過去のファイルを復元
$ git checkout [commit id] [filename]ブランチを変更
$ git checkout [branch]コンフリクトしたときに上方を指定してファイル内容を採用
$ git checkout --ours [filename]コンフリクトしたときに下方を指定してファイル内容を採用
$ git checkout --theirs [filename]show 【表示に関する操作】
最新のコミット内容を表示
$ git showタグを指定してコミット内容を表示
$ git show [tagname]reset 【やり直しなどの操作】
インデックスを現在のHEADの状態にする
$ git reset [commit id]インデックスからファイルをアンステージ
$ git reset HEAD [filename]すべてをコミットIDの状態に戻す
$ git reset --hard [commit id]git reflogで確認した番号の状態に戻す
$ git reset --hard HEAD@{[number]}直前の状態に戻す
$ git reset --hard ORIG_HEADrm 【ファイルを削除】
ワークツリーとインデックスからファイルを削除
$ git rm [filename]インデックスのファイルを削除
$ git rm --cached [filename]mv 【ファイル名を変更】
インデックスとワークツリーに同ファイル存在時、ファイル名を変更
$ git mv [filename 1] [filename 2]revert / rebase 【コミットの取り消し】
コミットIDのコミットを取り消す
$ git revert [commit id]rebase
コミットIDから古い順にコミットを表示
- コミットの行を消すとコミットの取り消し
- 先頭のpickをほかのものに置き換えるとコミットメッセージなどの編集が可能
$ git rebase -i [commit id]直前のgit rebaseの編集を中止
$ git rebase --abortgit rebaseの変更を適応
$ git rebase --continueclone 【リポジトリをコピー】
リポジトリをコピー
$ git clone [repository PATH] [new repository PATH]push 【リモートリポジトリに変更を書き込む】
リモートリポジトリに変更を書き込む.
$ git push [remote repository PATH] [branch]リモートリポジトリにすべてのタグをアップロード
$ git push [remote repository] --tagsリモートリポジトリに指定したタグをアップロード
$ git push [remote repository] [tagname]指定したブランチ,もしくはタグをリモートリポジトリから削除
$ git push [remote repository] :[branch or tagname]pull
リモートリポジトリの変更を取り込む
$ git pull [remote repository PATH] [branch]merge 【ブランチ同士をマージ】
現在のブランチをほかのブランチとマージ
$ git merge [branch]tag
タグの一覧を表示
$ git tagタグとそのメッセージ[行数指定]の一覧を表示する(行数指定なしの場合1行)
$ git tag -n[number]@タグを,フィルターをかけて表示する.
$ git tag -l [filter]現在のコミットIDにタグを関連付けする.
$ git tag [tagname]コミットIDを指定してタグを関連付けする.
$ git tag [tagname] [commit id]現在のコミットIDにメッセージ付きのタグを関連付けする.
$ git tag -a [tagname]指定したタグを削除する.
$ git tag -d [tagname]stash
現在の状態を保存する.
$ git stashメッセージ付きで現在の状態を保存する.
$ git stash save “[message]”保存した状態の一覧を表示する.
$ git stash list最新の保存状態を復元する.
$ git stash pop番号を指定して保存状態を復元する.
$ git stash pop stash@{[numbar]}保存状態をリストに残したまま最新の保存状態を復元する.
$ git stash apply保存状態をリストに残したまま指定した番号の保存状態を復元する.
$ git stash apply stash@{[number]}保存状態を削除する.
$ git stash drop stash@{[number]}保存状態をすべて削除する.
$ git stash clearreflog
過去にHEADが指していたコミット一覧をを表示する.
$ git reflogブランチを指定して過去にHEADが指していたコミット一覧を表示する.
$ git reflog [branch]cherry-pick
別のブランチのコミットを現在のブランチにコピーする.
$ git cherry-pick [commit id]config
使用されるリポジトリの設定を表示する.
$ git config -lユーザ名の設定.
$ git config --global user.name [username]メールアドレスの設定.
$ git config --global user.email [email address]出力結果を色づけする.
$ git config --global color.ui autoまとめ
テーブルにすべきか、コードにすべきか悩みましたが、とりあえずコピペ出来る校舎にしてみましたがいかがでしょうか。
とりあえず最初は
- リモートリポジトリをクローン
- ブランチを切って作業
- 変更してコミット
- コミットメッセージを添えてプッシュ
- レビューを受けて修正
- マージして1にもどる
という開発の基本的な流れができるようになりましょう!
長文お疲れさまでした!
- 投稿日:2021-01-15T13:49:30+09:00
特定のブランチで修正されたファイル一覧を出す
結論
これでOK。
git diff --name-only <分岐先ブランチ名> `git merge-base <分岐先ブランチ名> <分岐元ブランチ名>`CIツールなどを使っていて、
unknown revision or path not in the working tree.
で怒られる場合はブランチ名
をoringin/ブランチ名
に修正すればいける(場合がある)削除したファイルは表示したくない場合(2021/1/15 14:15追記)
git diff --name-only --diff-filter=ACMR `git merge-base <分岐先ブランチ名> <分岐元ブランチ名>` <分岐先ブランチ名>参考
- 投稿日:2021-01-15T13:45:20+09:00
git rebase -i を利用してコミットをまとめる
作業の前に
万一に失敗したときのため、ローカルにバックアップをとるなどリスクヘッジをしておくと安心です。
作業手順: checkout→log→rebase
まとめる対象のブランチにチェックアウト
$ git checkout branch_nameコミットログから「まとめる対象の一つ前のコミットID」を取得する
$ git log * commit ffc5767e557a84faea786a17d1f3d23ac10e330c | Author: hoge <hoge@example.com> | Date: Fri Sep 18 04:08:27 2020 +0000rebaseしてコミットをまとめる
$ git rebase -i ffc5767e557a84faea786a17d1f3d23ac10e330c参考
"pull"と"pull --rebase"との違い
→fetch, merge, rebaseが図解つきで説明されているのでわかりやすかったです。
- 投稿日:2021-01-15T12:27:32+09:00
git init後のデフォルトブランチ名をmainに
概要
ローカルリポジトリのデフォルトブランチ名変更
目的
git init
コマンドで空のGitローカルリポジトリを作成する際のデフォルトブランチ名をmaster
からmain
に変更したい。環境
- ホストトOS
- Windows 10
- 仮想化ツール
- VMware Workstation Player 16.1.0
- ゲストOS
- CentOS 8
- Git
- 変更前
- Git version 2.26.0
- yum で日本の某ミラーサイトから最新取得
- 変更後
- Git version 2.30.0
- 2021年1月15日現在の最新安定板ソース
背景
下記リンクのAWSハンズオンでAWSを実践しようと思い立ち、記載の手順通りに実施しようとした。
上記の手順ではReactプロジェクトをローカルリポジトリとして初期化し、
リモートリポジトリへpushする手順となっている。
git init
後のデフォルトブランチはmaster
。他方、GitHubは昨年秋頃より新規リポジトリのデフォルトブランチ名を
master
からmain
に変更していた。
- GitHubリポジトリ新規作成後のデフォルトブランチは
main
。リモートリポジトリにはない新規ブランチとして
master
をpushしても良かったが、
GitHubの声明を読む感じだと今後はGitのデフォルトブランチはmain
になるのが主流と考えられる。
個人的にmain
を意識づけしたくローカルリポジトリのデフォルトブランチを変更する方法を調査した。過程
- 所要時間 : 2時間
- 調査 : 1時間30分
- 実施 : 30分
- Git version 2.30.0のソースコードをダウンロード
make configure
./configure
make prefix=/usr/local all
make prefix=/usr/local install
- ゲストOS再起動 <= インストールに成功しても再起動しないと反映されなかった。常駐サービスの再起動でも反映可能か?
npx create-react-app amplifyapp
<= 適宜作業ディレクトリにてgit init
<= 6.で作成したamplifyapp
ディレクトリに移動して実行git remote add origin git@github.com:{GitHubアカウント}/{新規作成したリモートリポジトリ名}.git
git add .
git commit -m "{適宜コミットコメント}"
git push origin main
<= AWSハンズオンサイトではブランチ名がmaster
だったのをmain
に変更※途中、
Ed25519
方式の鍵ペアを作成してGitHubのSSH秘密鍵に登録した。割愛。結果
問題なくリモートリポジトリの
main
ブランチに反映できた。
CentOS 8 のyumリポジトリでは、Git最新版が2.27系の模様(2020/01/15現在)。
仕方なくGit公式リポジトリから最新ソースを取得してビルドした。
git config --global init.defaultBranch main
でデフォルトブランチ名をmain
に変更した。
その結果、AWSハンズオンの手順の通りにローカルリポジトリのmainブランチの変更をリモートリポジトリのmainブランチに反映できた。参照 および 引用
- AWS ハンズオン 静的ウェブサイトのホスティング
- The default branch for newly-created repositories is now main
- Gitをソースコードからインストールする
- Change git init default branch name
- Gitリリース
技術情報をご共有頂きましてありがたい限りです。 m(_ _)m
- 投稿日:2021-01-15T10:14:16+09:00
VSCode を使って社内 Gitlab の Issue・MR を操作する
はじめに
gitlab 謹製の VSCode の拡張機能 GitLab Workflow が便利だったので、紹介します。
この拡張を使うと、VSCode と Gitlab がシームレスに繋がります。
機能紹介
この拡張機能では、以下のようなことが可能です。
※こちらに挙げたのは一部です。詳細はこちら。
- VSCode で、自分にアサインされている Issue や MR の一覧や詳細を閲覧できる
- MR は、description とファイル差分もそれぞれ閲覧可能
- デフォルトのビューは以下の 5 つだが、表示したい Issue や MR はカスタム可能
Issues assigned to me
: assignee が自分の IssueIssues created by me
: author が自分の IssueMerge Requests assigned to me
: assignee が自分の MRMerge Requests created by me
: author が自分の MRAll project merge requests
: すべての MR- 特に、差分を VSCode の differ で見れるのはありがたい
- VScode から、Gitlab のAdvanced Searchを行うことができる
- Issue, MR, Commit, Wiki 等の横断検索が可能
- GitLensでは Commit の検索は可能なので、使い分け
- VSCode で、Issue や MR の詳細・編集が可能
- GUI 上はコメントの追加しかできないが、GitLab Quick Actionsが使用可能なので、大抵のことはできる。以下、一部抜粋
/assign me
: assignee を自分に/assign @user_name
: assignee を @user_name に/unassign
: assignee を空に/create_merge_request <branch name>
: MR 作成/due <date>
: due date の指定/label ~label1 ~label2
: ラベル追加- Snippet の作成・挿入が可能
- GitLabCI 構成の検証が可能
- 詳しくは見てないが、Validate the CI YAML configurationに相当することができそう
環境
Windows 10: version 2004 Gitlab: GitLab Community Edition 13.6.1 GitLab Workflow: version3.9.0 VSCode: 1.52.1設定手順
参照: setup
Step1: PAT(Personal Access Token)の発行
- https://your-gitlab-domain/profile/personal_access_tokensを開く
- 或いは
Settings
>Access Tokens
Add a personal access token
の必要項目を埋める
Create personal access token
をクリックStep2: Gitlab Workflow に Token と Domain を設定する
- VSCode を開く
Ctrl + Shift + P
で Command Palette を開く(Mac の場合はCmd + Shift + P
)
your-gitlab-domain
>作成したToken
の順に入力
- ドメインを入力する際は、末尾に
/
を入れないようにする(入れるとエラー)[カスタムドメインを使用している場合のみ]
Settings.json
を開く"gitlab.instanceUrl": "http://your-gitlab-domain",
を追加
- こちらも末尾に
/
を入れないようにする- 詳細はこちら
Step3: 実際に使用する
Ctrl + Shift + P
で Command Palette を開く(Mac の場合はCmd + Shift + P
)View: Show Gitlab Workflow
を実行- 現在の Workspace に設定されたリモート URL に存在する Issue と MR が、 View に表示される
- デフォルトでは RemoteName が
origin
の URL を使用する。変更したい場合はgitlab.remoteName
を設定する他にできること
終わりに
Gitlab Workflow を使うことで、VSCode とブラウザを行き来する機会が減り、より開発に専念できるようになりました。
参考文献
- 投稿日:2021-01-15T08:44:36+09:00
GitHubをCUIで使い倒す
ローカルリポジトリとGitHub上のリモートリポジトリとの連携方法をコマンドで行う。備忘録としてメモしておく。用語などは別記事を参照してください。
クローン
GitHub上で作成したリモートリポジトリをローカルに持ってくる方法。
git clone URL
% git clone https://github.com/UserName/Practice.git Cloning into 'Practice'... remote: Enumerating objects: 3, done. remote: Counting objects: 100% (3/3), done. remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done.プッシュ
git push origin(リモートリポジトリ名) ブランチ名
※originとは、リモートリポジトリのデフォルト名のこと。% git push origin main Enumerating objects: 4, done. Counting objects: 100% (4/4), done. Delta compression using up to 8 threads Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 481 bytes | 481.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0) To https://github.com/UserName/Practice.git 6914a74..6273315 main -> mainプル
git pull origin ブランチ名
% git pull origin main remote: Enumerating objects: 5, done. remote: Counting objects: 100% (5/5), done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0 Unpacking objects: 100% (3/3), done. From https://github.com/UserName/Practice * branch main -> FETCH_HEAD 6273315..fd0cb5c main -> origin/main Updating 6273315..fd0cb5c Fast-forward index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
- 投稿日:2021-01-15T08:08:06+09:00
GitをCUIで使い倒す
Gitをコマンドで使おう!
Terminalを使ったGitの使用法をまとめる。
Gitのインストールの仕方等は他の記事を参考にしてください。ローカルリポジトリを作成
作業したいローカルディレクトリまで
cd
コマンドを使って入り、そこでgit init
を入力。すると下記のようにコマンドが走り、ディレクトリ内に.git
ファイルが作られる(隠しファイル)。Initialized empty Git repository in /Users/User/htdocs/lesson/.git/
ディレクトリ内の変更を確認
なにかしらファイルを弄ったりしたら、
git status
で確認。% git status On branch master No commits yet Untracked files: (use "git add <file>..." to include in what will be committed) index.html nothing added to commit but untracked files present (use "git add" to track)ステージ
git add ファイル名
を使ってステージに上げたいファイルを選択。% git add index.html % git status On branch master No commits yet Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: index.htmlコミット
git commit -m "任意のコメント"
を入力。% git commit -m "index.htmlを作成" [master 6c0933e] index.htmlを作成 1 file changed, 11 insertions(+) create mode 100644 index.html※コミットの履歴を確認する方法
git log
% git log commit 6c0933e04321d94a6fa534441e060fac103ea985 (HEAD -> master) Author: User Name <メールアドレス> Date: Thu Jan 14 23:17:20 2021 +0900 index.htmlを作成ブランチ作成〜チェックアウト
1. ブランチ作成
git branch ブランチ名
//ブランチを作っていない状態(マスターブランチのみ) % git branch * master //ブランチを作成 % git branch practice % git branch * master practice //practiceブランチができた!!2.チェックアウト
git checkout ブランチ名
//practiceにチェックアウト % git checkout practice Switched to branch 'practice' //チェックアウトできたか確認 % git branch master * practice //'*'がついているものがチェックアウトしているブランチマージ
1.チェックアウトしているブランチで編集内容をコミット
先程の流れで、practiceにチェックアウトした状態で、index.htmlを編集したあと、、、
//変更をコミットする % git add index.html % git commit -m "テキストを追加" [practice 9d57bc5] テキストを追加 1 file changed, 1 insertion(+)2.マージ先のブランチにチェックアウト
説明割愛でござる
3.
git merge ブランチ名
でマージ% git merge practice Updating f859b2a..9d57bc5 Fast-forward index.html | 1 + 1 file changed, 1 insertion(+)以上がローカルでのGitの使い方の基本です。
別記事でGitHubとの連携(push等)を別途解説します。