Open7

Git / GtiHubの運用

omakazuomakazu

Git / GitHubでのデータのアップロード・ブランチについての分かりやすい説明。

GitHub用語
リポジトリとは、ファイルの変更履歴を保存する場所のこと。
ローカルリポジトリとは、自分のPC上のリポジトリのこと。ネット上ではなく、自分のPCのハードディスクなどの保存場所のこと。
リモートリポジトリとは、オンライン上のリポジトリのこと。
ステージングエリアとは、コミットする前のデータを一次的に保存する場所のこと。自分のPC上にあります。
ブランチとは、並行して行われる履歴を分岐して記録する機能のこと。
プルリクエストとは、開発者のローカルリポジトリでの変更を他の開発者に通知する機能のこと。
addとは、データをステージングエリアに保存するためのコマンド。
commitとは、データを自分のPCに保存するためのコマンド。データをローカルリポジトリに保存するコマンド。
pushとは、データをオンラインサーバーにアップロードするためのコマンド。アップロードと同義。リモートリポジトリに保存するコマンド。
pullとは、ローカルリポジトリにリモートリポジトリの変更を取り込むためのコマンド。
cloneとは、リモートリポジトリにあるデータをコピーして、ダウンロードすること。
mergeとは、差分を精査して、データを統合するためのコマンド。

https://qiita.com/harufuji/items/5e958a87d35a81216c03

GitHubの導入〜基本操作 for Windows

Windows環境はこれでGitをコマンドプロンプトで動かせるようにした。

https://qiita.com/Kenta-Okuda/items/c3dcd60a80a82147e1bf

omakazuomakazu

Windows環境

Git For Windowsから諸々の環境をインストールした。

https://gitforwindows.org/
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
omakazuomakazu

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>```
omakazuomakazu

GitHubのwebからも手動で直接アップロードすることができるが、
一回に上げれるファイル数が100ぐらいで止まってしまうために
フォルダ階層が深いときには途中で止まってしまうと結構厄介なため
gitからのpushの方が利点があると思った

omakazuomakazu

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のパスワード確認を省略する

https://prog-8.com/docs/git-env

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.mdadd``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への変更とか言われても..っっていうエラーらしい。

https://qiita.com/ststs/items/6e7773aa33107652e69e

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

https://yoshiyoshifujii.hatenablog.com/entry/2014/08/12/230144

どうやら ~/.ssh/configを設定しないといけないのかもしれない。

https://rapicro.com/update_git_on_mac/
https://prog-8.com/docs/git-env
https://atuweb.info/201912_git-update/#gsc.tab=0
https://ormcat.net/blog/20210509_github-denied-publickey/

omakazuomakazu

Mac Intel pushまで

Reference

https://rowingfan.hatenablog.jp/entry/2020/10/20/151136
https://codelikes.com/git-pull/
https://www.zunouissiki.com/entry/cannot-git-push-everything-up-to-date/

流れ

以下よりkey作成後
https://rowingfan.hatenablog.jp/entry/2020/10/20/151136

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名>