Git / GtiHubの運用
Git / GitHubでのデータのアップロード・ブランチについての分かりやすい説明。
GitHub用語
リポジトリとは、ファイルの変更履歴を保存する場所のこと。
ローカルリポジトリとは、自分のPC上のリポジトリのこと。ネット上ではなく、自分のPCのハードディスクなどの保存場所のこと。
リモートリポジトリとは、オンライン上のリポジトリのこと。
ステージングエリアとは、コミットする前のデータを一次的に保存する場所のこと。自分のPC上にあります。
ブランチとは、並行して行われる履歴を分岐して記録する機能のこと。
プルリクエストとは、開発者のローカルリポジトリでの変更を他の開発者に通知する機能のこと。
addとは、データをステージングエリアに保存するためのコマンド。
commitとは、データを自分のPCに保存するためのコマンド。データをローカルリポジトリに保存するコマンド。
pushとは、データをオンラインサーバーにアップロードするためのコマンド。アップロードと同義。リモートリポジトリに保存するコマンド。
pullとは、ローカルリポジトリにリモートリポジトリの変更を取り込むためのコマンド。
cloneとは、リモートリポジトリにあるデータをコピーして、ダウンロードすること。
mergeとは、差分を精査して、データを統合するためのコマンド。
GitHubの導入〜基本操作 for Windows
Windows環境はこれでGitをコマンドプロンプトで動かせるようにした。
Windows環境
Git For Windowsから諸々の環境をインストールした。
installerは上の記事のおすすめに従って、Checkout as-is commit as-isだけhennkousita
installできたかの確認
$ git --version
git version 2.38.0.windows.1
ユーザー情報の設定
1行目は名前
2行目はGithubのメールと同じにしておいた。
git config --global user.name "Kenta Okuda"
git config --global user.email "kenta.okuda@example.com"
以下のコミットログの記述するためのエディターはなんかうまく反応してなさそうだったが、installerの時に設定があったのでVimにしてありそうだからこのまま無視してすすむ。
git config --global core.editor 'vim -c "set fenc=utf-8"'
カラー設定はおすすめのままやった。
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
Git の初期化
これからgitで管理していきたいディレクトリに移動してからそこにて初期化を行う。
git init
ホームディレクトリにて、git initをすると.git/や.gitconfigが出来上がる
##Git 基本操作
add
ファイルをステージ領域(インデックス)にあげるためのコマンド、ステージング。コミットする前の一時的な領域。
git add 'プッシュしたいファイル名'
ディレクトリに存在する全てのファイルをプッシュする場合は
git add .
.(コロン)をファイル名に指定することでディレクトリ内の全ファイルを示します。
commit
ステージングされたファイルをローカルリポジトリにあげるための操作commit
git commit
git commit -m "commit message"
-mのコミットメッセージをつけないとVimなどが立ち上がってコミットメッセージを入力することができる。
コミットメッセージの一般的なルール
1行目:変更内容の要約(タイトル、概要)
2行目 :空行
3行目以降:変更した理由(内容、詳細)
コミットメッセージは具体的に以下みたいに書くと良いみたい。
[fix] Aボタンが反応しないバグを修正
コンポーネントの関連付けができていなかったのを修正
[fix]みたいなコミット種別を記載しとくとわかりやすいみたい。
add : ファイルの追加
fix : バグ修正
hotfix : クリティカル(致命的)なバグの修正
update : 機能修正(バグではない)
change : 仕様変更
clean : 整理(リファクタリングなど)
remove : ファイルの削除
upgrade : バージョンアップ
push
ローカルリポジトリでの変更をリモートリポジトリ(GitHub)に上げるためにはpushを行う。
事前にGitHubにてあらかじめリポジトリを作成しておく必要がある。
リーモートリポジトリにpushする前にリモートリポジトリに対してaddを実行してステージングする必要がある。
git remote add origin https://github.com/'ユーザID'/'リポジトリ名'.git
originのところがこのGithubのURLのところの一時的な別名になるらしい。変数みたいなイメージ。
つまりこのリモートリポジトリのaddはgithubのリモートリポジトリのURLをoriginと呼びましょうと宣言するイメージ。
origin: デフォルトのリポジトリの場所(URL)の別名
イメージ的に分かりやすく言えばgithubのコードの置いてある場 所、 つまりリモートリポジトリ
master: デフォルトのブランチの名前。メインのブランチ
https://qiita.com/seri1234/items/e651b3e108a695a92809
git remote addの一覧の確認
$ git remote -v
origin https://github.com/'ユーザID'/'リポジトリ名'.git (fetch)
origin https://github.com/'ユーザID'/'リポジトリ名'.git (push)
削除したいとき
git remote rm [削除したいリモートリポジトリ名]
URLを変更したいとき
git remote set-url origin [変更先のURL]
リポジトリ名の変更をしたいとき
git remote rename [変更前リポジトリ名] [変更後リポジトリ名]
ステージング時にGtihubのユーザー名とパスワードの入力を求められるので打ち込む
始めに origin masterをpushするときは-uのオプションをつけるのがおすすめらしい。そうすることで、このorigin masterが上流ブランチに設定されるらしい。
git push -u origin master
以降 git push / git pullなど特に指定していないときは、上流ブランチが指定されたということになるみたい。
でも無難なのは origin branch名を指定してあげるのが無難
git push origin 'ブランチ名'
上流ブランチ
「上流ブランチ(Upstream branch)」とは、あるローカルブランチが、履歴を追跡するように設定したリモートブランチの事を指します。
https://www-creators.com/archives/4931
以下の-vvオプションで上流ブランチを確認できるらしい。
git branch -vv
master b104f69 [origin/master: ahead 1] xxxx xxxxx xxxxxxxxxxxx xxx.
cool-feature b104f69 [origin/cool-feature] xxx xxxxxxxx xxxxxxxx xxxx xxxxx.
この上流ブランチの情報は.git/confに書き込まれているのでそこに直接書き込むのも大丈夫。
Branch
ブランチは別々の作業を並行して行うために利用します。各ブランチはmasterブランチから分岐させ、それぞれのブランチでは、全く別の作業を同時に実施できます。それぞれのブランチでの作業が終了したら、masterブランチにマージします。
https://qiita.com/Kenta-Okuda/items/c3dcd60a80a82147e1bf
https://qiita.com/Kenta-Okuda/items/c3dcd60a80a82147e1bf
branchの確認
git branch
branchの作成
git branch ブランチネーム
ブランチの切り替え
ローカルリポジトリにおいてbrachを切り替えるためには
git checkout ブランチネーム
ブランチの作成と切り替えを同時に行うにはオプションbを使うとできるらしい。
git checkout -b <branch>
現在のブランチに対して他のブランチで行った内容を取り込むためには
mergeを行う
git checkout master // masterブランチに移動
git merge bug-fix // masterブランチにbug-fixブランチをマージ
pull
リモートリポジトリでやっている内容をローカルに更新するために使えるコマンド
ローカルリポジトリのmasterブランチにリモートリポジトリoriginのmasterブランチを取り込む例
git checkout master // masterブランチに移動
git pull origin master // masterブランチにリモートリポジトリのmasterブランチをマージ
status / diff
statusで
変更が加えられたファイルを表示する。
git status
前回のステージングから変更が生じた個所を差分として表示させたいときは
diffが使える。
ファイル名を指定しても実行することができらしい。
$ git diff
diff --git a/test.html b/test.html
index d1e9fdb..5bd36cc 100644
--- a/test.html
+++ b/test.html
@@ -6,6 +6,6 @@
<body>
<p>git_test</p>
-
+
</body>
</html>```
GitHubのwebからも手動で直接アップロードすることができるが、
一回に上げれるファイル数が100ぐらいで止まってしまうために
フォルダ階層が深いときには途中で止まってしまうと結構厄介なため
gitからのpushの方が利点があると思った
Intel MacでのGitの運用
Xcodeなどをインストールしていると基本的には勝手にGitが入っている。
バージョンの確認をおっこなた時にApple Gitと表示されるとそれはMacの初期状態ではいっているGit
$ git --version
git version 2.17.2 (Apple Git-113)
Homebrew管理でバージョン管理を行う方法
$ brew install git
Xcodeで入っているGitは/usr/bin/git
に入っているらしい。
入ったHomebrew越しのGitは/usr/local/bin/git
に入っている。
以下でどこから読まれているgitのパスなのかを確認することができる。
which git
以下の場所に新しいgitが入っているのでバージョンの確認を行う。
$ /usr/local/bin/git --version
git version 2.38.0
この時点ではまだApple Gitを使う設定になっているのでzshに反映させる。
$ echo 'export PATH="/usr/local/bin:$PATH"' >> ~/.zshenv
.zshenvにpathの登録用コマンドの書き込み
$ source ~/.zshenv
.zshenvを今すぐ起動
完了後、バージョンの確認
$ git --version
git version 2.17.2 (Apple Git-113)
ユーザー情報の入力
$ git config --global user.name "ユーザー名"
$ git config --global user.email "メールアドレス"
ユーザ情報の確認
$ git config user.name
$ git config user.email
SSHの設定
~/.ssh
のディレクトリ内にキーファイルがあるかどうかを確認する
ls ~/.ssh
SSHキーの作成、秘密鍵、公開鍵(.pub)の生成
ssh-keygen -t 暗号化方式
で秘密鍵と公開鍵を生成できる。
-t 方式 作成する鍵の暗号化形式を「rsa」(デフォルト)、「dsa」「ecdsa」「ed25519」から指定する
>-C コメント コメントを指定する(デフォルトは「ユーザー名@ホスト名」。「-C ""」でコメントを削除)
[引用]https://atmarkit.itmedia.co.jp/ait/articles/1908/02/news015.html
ed25519鍵を使ってみる。
$ ssh-keygen -t ed25519 -C "GitHubに登録したメールアドレス"
Enter file in which to save the key (/Users/username/.ssh/id_ed25519):
とでてきたら、Enterを押すことで~/.sshに作成される。
Enter passphrase (empty for no passphrase):
パスワード入れて、
ランダムアートがでてくる。
The key's randomart image is:
+--[ED25519 256]--+
| .+..oo. |
| . oo. .|
| . . |
| ... o |
| Eo. o +.|
| o+o . B.o|
| .++ + .+ *.|
| ooo =+ * =|
| o+=O+.=.*+|
+----[SHA256]-----+
キーが生成されている。
$ ls ~/.ssh
id_ed25519 id_ed25519.pub
他のGitようのSSHキーとして名前を変えておく。
$ cd ~/.ssh/
$ mv ./id_ed25519 ./id_ed25519_Git
$ mv ./id_ed25519.pub ./id_ed25519_Git.pub
GithubアカウントとSSHキーを紐づける
id_ed25519_Git.pub
ファイルに書かれた内容をコピーする
以下でクリップボードにコピーされる。
pbcopy < ~/.ssh/id_ed25519_Git.pub
Web Githubのsettingsより、SSH and GPG keys. からNew SSH Keyを推す。
Titleに分かりやすい任意の名前をつける
keyTypeはauthication keyでおk
Key欄にコピーした内容を貼り付ける。
SSH接続
$ ssh -T git@github.com
でGitとの疎通テストができる。-i 秘密keyファイル
でそのファイルが使用される。デフォルトでは、id_ed25519やid_rsaなどが勝手に使われる。
$ ssh -T -i ~/.ssh/id_ed25519_Git git@github.com
Enter passphrase for key '/Users/username/.ssh/id_ed25519_Git':
The authenticity of host 'github.com (20.27.177.113)' can't be established.
ECDSA key fingerprint is SHA256:p2QAMXNIC1TJYWeIOttrVc98/R1BUFWu3/LiyKgUfQM.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
さっき設定したパスワードが聞かれるので入力。
yesと入力後enterを押す。
NGの場合は、以下のような文言が出てくる
git@github.com: Permission denied (publickey).
okの場合は以下のような挨拶が出てくる
Hi Username! You've successfully authenticated, but GitHub does not provide shell access.
SSHのパスワード確認を省略する
init / push
$ git init
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch <name>
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m <name>
ブランチ名の変更
ブランチ名がmasterになっているので、Git Hubに合わせて、mainに変更する。
$ git branch -M main
branch名の変更でエラー
以下のようなエラーにあたる。
初期時に起きる。
$ git branch -M main
error: refname refs/heads/master not found
fatal: Branch rename failed
README.md
がないとエラーが起きるらしい。
なのでinit
後にgit branch -M main
するわけでなくて、README.md
をadd``commit
してからbranch名を変更する。
/work/project$ echo "# project" >> README.md
/work/project$ ls-la
-rw-r--r-- 1 username staff 10 12 13 12:14 README.md
/work/project$ cat ./README.md
# project
/work/project$ git add README.md
/work/project$ git commit -m "first commit README.md"
[master (root-commit) df864ca] first commit README.md
1 file changed, 1 insertion(+)
create mode 100644 README.md
/work/project$ git branch -M main
./.git
の中にrefs/heads/master
が生成されていなかったためのエラーらしい。
add
, commit
を実行した後にmasterが生成されるためにmasterからmainへの変更とか言われても..っっていうエラーらしい。
Git Hub SSH link
GitHubのRepogitoryの緑色のCodeよりSSHのリンクをコピーする。
以下で originという名前でリモートリポジトリを設定する。
git remote add origin <URL>
リモートリポジトリの確認
$ git remote -v
add / commit
branchにadd/ Commitする
addする。
全部のファイルをaddする。
$ git add .
一部ファイルをaddする
$ git add ファイルパス
ここまでをCommitする
git commit -m "first Commit"
push
ここまでのやつをoriginに設定したリモートリポジトリに
branchにCommitしたやつをpushする。
git push origin main
どうやら ~/.ssh/configを設定しないといけないのかもしれない。
M1 Mac での Git と Brew
Mac Intel pushまで
Reference
流れ
以下よりkey作成後
cloneしたフォルダに対してpush
coloneしたフォルダに必要ファイルを移動
addしてcommit
$ git push -u origin main
Enumerating objects: 23, done.
Counting objects: 100% (23/23), done.
Delta compression using up to 16 threads
Compressing objects: 100% (22/22), done.
Writing objects: 100% (22/22), 6.63 KiB | 2.21 MiB/s, done.
Total 22 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), done.
To github.com:omakazu/*******.git
4967807..0ba42a7 main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
既存のフォルダに対してpush
既存のフォルダに対してgit init
$ git remote add origin git@github.com:omakazu/******.git
$ git remote -v
$ git log
fatal: your current branch 'master' does not have any commits yet
$ git branch -M main
error: refname refs/heads/master not found
fatal: Branch rename failed
$ git pull origin main
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.
From github.com:omakazu/*******
* branch main -> FETCH_HEAD
* [new branch] main -> origin/main
$ git log
commit aae71c80aeade869d17bd2f09194ae3ee8c03d4d (HEAD -> master, origin/main)
Author: omakazu <67169225+******@users.noreply.github.com>
Date: Sun Dec 18 19:27:57 2022 +0900
Initial commit
$ git branch -M main
$ git push -u origin main
Branch 'main' set up to track remote branch 'main' from 'origin'.
Everything up-to-date
$ git fetch --all
Fetching origin
$ git add ./
$ git commit -m "first Commit"
[main ee8b993] first Commit
$ git push -u origin main
Enumerating objects: 39, done.
Counting objects: 100% (39/39), done.
Delta compression using up to 16 threads
Compressing objects: 100% (38/38), done.
Writing objects: 100% (38/38), 2.08 MiB | 1.71 MiB/s, done.
Total 38 (delta 5), reused 0 (delta 0)
remote: Resolving deltas: 100% (5/5), done.
To github.com:omakazu/********.git
aae71c8..ee8b993 main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
branch周りについて
bracnの新規作成かつ、現在のbranchの移動
# branch新規作成かつ、現在のbranchの移動
$ git branch -b <branch名>
# branchの移動
$ git branch <branch名>