Subsections of Github
Repository Operations
リポジトリのダウンロード
GitHubにあるリモートリポジトリをhttps接続でダウンロードする場合は以下のコマンドで。(ただし,GitHub上のリポジトリ設定で若干異なる場合もある)
$ git clone https://github.com/someone/somerepo.git
上記URLのsomeone, someprepoの部分はダウンロードしたいリポジトリによって変わる。
ssh接続
git clone git@github.com:<repo>.git
cloneするときのURL以下はブラウザ上のgithubでcloneしたいリポジトリに移動し、code
をクリックすることで確認できる。
publicの場合
$ git clone https://github.com/<repo>
privateの場合
$ git clone https://<username>@github.com/someone/somerepo.git
Wikiページをcloneする場合は.git
の前に.wiki
をつける。
- 参照 リポジトリをクローンする
最新情報のダウンロード / 更新ファイルのアップロード
ダウンロードしたファイルをいじるときには,まず,Gitサーバから最新バージョンをダウンロードしてから開始。
$ git pull origin main
これはサーバ(origin)から,masterブランチ(ブランチは後述)をダウンロードしてローカルリポジトリを更新し(fetch),作業ディレクトリに反映(merge)するという意味。
ファイルを更新したら,gitサーバ(origin)にアップロードする。
$ git add <更新したファイル名>
$ git commit -m “修正点を少し書く” <=ローカルリポジトリ(手元)に登録
$ git push origin main <=リモートリポジトリに反映
とりあえず,これで最低限のファイル共有/共同編集はできる。
git addは,更新したファイルのうち,リモートリポジトリに反映したいファイルを指定(stagingとよぶ。これにより対象ファイルはstaging areaに移動)する。指定方法は以下のようにいろいろある。
$ git add . 新規作成ファイルと更新ファイルを全部指定
$ git add -u 前回から更新したファイルのみ指定(新規作成ファイルは含まない)
$ git add -A .新規作成ファイル,更新ファイル,削除ファイル全部指定
ただし,リモートリポジトリは,知らないヒトが勝手に’git push’で書き換えたりできるとよくないので,アクセス制限をできるようになっている。アクセス制限がかかっているリモートリポジトリの内容の修正をリクエストするにはPullRequestをする(後述)。
gitサーバでリポジトリを削除する方法
- 削除したいリポジトリのページに移動
- 上の一覧から
Settings
をクリック - 下の方にある
Delete this repository
をクリック - 警告を読んで、消したいリポジトリの名前を入力
I understand the consequences, delete this repository
をクリック
ローカルリポジトリの削除(git initの取り消し)
.gitファイルを削除して、git initしたディレクトリに対して、それを取り消す
$rm -rf .git
コミット履歴の確認
$ git log
--graph
というオプションをつけるとコミットログをアスキーアートでカラフルに表示シてくれる。たくさんブランチがあるリポジトリなどでは見やすくなる
$ git log --graph
コミットのキャンセル
ステージングのキャンセル
ステージング(git add)から変更ファイルを取り消す場合は下記コマンドを実行します。
$ git rm --cached <ファイル名>
ステージング(git add)から削除するだけでなく、ファイル自体も削除する場合には下記コマンドを実行します。
$ git rm -f <ファイル名>
コミットの取り消し
直前に行ったコミットを取り消すには下記コマンドを実行します。
作業ディレクトリの内容はコミット時のままで、「コミットした」ということだけが取り消されます。
「–soft」オプションは省略できます。
$ git reset [--soft] HEAD^
作業ディレクトリに加えた変更点もコミット前に戻す場合は以下のコマンドです。
$ git reset --hard HEAD^
作業ディレクトリをローカルリポジトリの最新状態にするには下記コマンドを実行します。
indexもクリーンされます。
$ git reset --hard HEAD
コミット後の修正
前回のコミットを破棄して、現在のIndex内容で新しくコミットします。
「reset」と「commit」を実行することと同様の処理となります。
コミットメッセージの修正なども行えます。
$ git commit --amend
プッシュの取り消し
基本、プッシュした情報をローカルリポジトリに戻すことはできない。 そこで、コミットを打ち消すコミットを生成する(git revertコマンド)。プッシュ済みのコミットを消す方法もあるが、よくなさそう。。git revertでは打ち消したコミットの記録が残る。
git revert
-
指定したコミットを、add前に戻してくれるコマンド。
-
ターミナル(間違って、masterにpushしちゃった時など)
% git log # コミットログの確認 % git revert 間違えたコミットID # 指定したコミットを、add前に戻す # ターミナルが編集できなくなるので、`:q`で脱出
- GitHub Desktopを確認すると、git revertで生成したコミットが生成されてるハズ。これをpushすれば、リモートリポジトリで打ち消されているハズ。この時、ローカルからも消えるので、注意。
-
参)ターミナルで実施する場合
% git pull # 念のため、ローカルのmasterを最新にする % git checkout pushすべきだったブランチ # ブランチを切り替える % git merge master % git add . # 変更箇所をadd % git commit -m "コミットメッセージ" % git push origin pushしたかったブランチ
※ 念のため、ローカルのmasterをpull(最新)にしてから、作業してたブランチも最新状態をmerge(反映)し、pushすべきだったブランチにpushするイメージ。
その他のコマンド
よく使用するコマンド
コマンド | 概要 |
---|---|
git init | 対象のディレクトリをバージョン管理できる入れ物に格納してくれるイメージ |
git add ●● | ●●をインデックスに追加。※ git add . とすると「全て」を対象にできる |
git commit -m ‘メッセージ’ | コミット |
git status | 現在のファイルの状態(staging等)一覧を表示する |
git reset <ファイル名> | 間違えてgit addしたファイルの取り消し(stagingの取り消し) |
git log | コミットログの履歴確認(コミットID、コミットメッセージ、日時) |
git remote add origin リモートリポジトリのURL(https://github.com/GitHubのユーザー名/リモートリポジトリ名.git) | ローカルリポジトリにリモートリポジトリの情報を付与し、紐づける |
git push origin ブランチ名 | ローカルの変更点を、リモートに反映。ブランチ名 masterなら、マスターブランチにプッシュ。 |
git pull origin master | リモートリポジトリ(origin)のマスターブランチをローカルリポジトリに反映。 |
git clone https://github.com/ユーザー名/リモートリポジト名.git | リモートリポジトからローカルリポジトリにダウンロード |
git remote -v | ローカルにクローンしたリポジトリのリモートURL確認方法 |
コミットメッセージ例
コミットメーセージ | 意味 |
---|---|
Create ●● class | クラス作成 |
Add relation with ●● | リレーションの追加 |
Add presence validation of ●● | バリデーションの追加 |
Add #parse_body for parse body’s markdown | - |
参照
上記にも記入済み
その他
About resetting commit and rm the file
コミットの取り消し
直前のコミットの取り消し
$ git reset <打ち消したいコミットID>
直前のコミットを打ち消す場合には以下のコマンドを使用
$ git reset --soft HEAD^
--soft
オプション:ワークディレクトリの内容はそのままでコミットだけを取り消したい場合に使用--hard
オプション:コミット取り消した上でワークディレクトリの内容も書き換えたい場合に使用HEAD^
: 直前のコミットを意味HEAD~{n}
n個前のコミットを意味
コミットの打ち消し
$ git revert <コミットのハッシュ値>
作業ツリーを指定したコミット時点の状態にまで戻し、コミットを行う。
コミットの上書き
直前のコミットに上書きする場合は以下のコマンドを使用
$ git commit --amend
リモートリポジトリからのみ特定のファイルを削除
git rm --cached <target file>
ディレクトリを削除する場合は
$ git rm --cached -r <target directory>
reference
Public key authentication settings in github
公開鍵を GitHub に登録することで、push 時などにパスワードを入力する手間が省略可能
公開鍵および秘密鍵の作成と登録
-
公開鍵および秘密鍵を作成
ssh-keygen -t ed25519
-
公開鍵 を GitHub に登録
cat ~/.ssh/id_ed25519.pub # コマンドを実行して表示されたすべての文字列を GitHub に登録 # # ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX user@host # ↑こんな感じの文字列をすべてコピペ
GitHub の公開鍵登録の手順は、
- Settings
- SSH and GPG keys
- [New SSH key]
- タイトルをつけ公開鍵をコピペし [Add SSH key]
-
SSH の設定 GitHub で使用する秘密鍵を設定するため、~/.ssh/config に設定を記述
最終行 (ProxyCommand の部分) は学内のコンピューターの場合にのみ設定
接続の確認
$ ssh -T git@github.com
ターミナルで実行して以下のように表示されればOK!
Hi (User名)! You've successfully authenticated, but GitHub does not provide shell access.
※途中で以下のプロンプトメッセージが表示されたらyes
と入力
The authenticity of host '[ssh.github.com]:443 (<no hostip for proxy command>)' can't be established. RSA key fingerprint is [以下省略]. Are you sure you want to continue connecting (yes/no/[fingerprint])? The authenticity of host '[ssh.github.com]:443 (<no hostip for proxy command>)' can't be established. RSA key fingerprint is [以下略]. Are you sure you want to continue connecting (yes/no/[fingerprint])?
ssh接続がうまく行かないとき
レポジトリのディレクトリに入り次のコマンドを入力
git config remote.origin.url
https://github.com/[ユーザID]/[リポジトリ]
となっていたらレポジトリのディレクトリ内の/.git/config
を開いてurl
の覧を
url = github.com:[ユーザID]/[リポジトリ].git
と書き換える。
または以下のコマンドを実行
git remote set-url origin [Host名]:[ユーザID]/[リポジトリ].git
※~/.ssh/configで設定していない場合は
git remote set-url origin git@github.com:[ユーザID]/[リポジトリ].git
でOK!
参照
Confirmation of difference
ファイルの変更差分の確認
$ git diff [変更前のコミット識別子]..[変更後のコミット識別子]
ブランチ同士の差分の確認
$ git diff master..develop
masterブランチにプルリクエストを送る前にdevelopブランチに追加した内容を確認できる
git pull する前に、リモート追跡ブランチとの差分を確認する
- リモートリポジトリからの変更内容の取得
$ git fetch origin
- ローカルリポジトリのmasterブランチの最新コミット(HEAD)とリモート追跡ブランチ(origin/master)を比較
$ git diff HEAD..origin/master
git push する前に、リモート追跡ブランチとの差分を確認する
-
$ git diff origin/master..HEAD
参考
Branch
ブランチとは?
ブランチとは平行世界のようなものである。 ブランチを活用することでmasterブランチをそのまま据え置いた状態で、別のブランチで新機能を試しながら作ることができる。
ブランチの正体は?
github公式ドキュメントによると、
ブランチとは(中略)コミットを指す軽量なポインタに過ぎません と説明されている。
リポジトリの正体は.git
という隠しフォルダのことであり、この中にあるrefs/heads/master
ファイルこそがブランチの正体である。
このファイルの中身をcatしてみると
dd95ddf066d452949bb54304bbf43ab3dadfee25
のように英数字の羅列が保存してある。これはコミットIDまたはコミットハッシュ値と呼ばれている。またコミットによって生成されたデータのことをコミットオブジェクトといい、一つのコミットオブジェクトに対して40文字のIDを割り当てるのがコミットIDである。
つまりブランチとはただ単に特定のコミットIDを指しているだけである。
またコミットオブジェクトにはそれぞれ
- tree
- parent
- author
- committer
の情報が保存されており、parent
が一つ前のコミットIDを示している。
例
作成したsample.txt
に何かしらの変更を加え、
$ git add sample.text
$ git commit -m "2回目のコミット"
$ git log
とすると、次のような結果が得られる。
このとき以下のように実行すると、コミットオブジェクトを確認することができる
$ git cat-file -p 0e9556
tree e290b48b356d721ae54d1edb03993802cc98bad8
parent 02f11b759bfeb461e117c5da18bb2dcbe06d862a
author llminatolllXXX@mail.coml1562052826 +0900
commit errllminatolllXXX@mail.coml1562052826 +0900
このparent
の部分が前のコミットのコミットIDを表しており、一番はじめのコミットではpaernt
は保存されていない
ひとことメモ ** コミットIDは何を元に作られているの?**
コミットID(コミットハッシュ値)は、実はこのコミットオブジェクトのバイト数と中身を使い、計算されて作られています。よって、コミットした人の名前やコミットした時間、指し示すparent、treeが違えばコミットハッシュ値も違うものになります。
その証拠に、同じ内容をコミットしていても、あなたの練習用リポジトリとわかばちゃんのコミットIDは違うはずです。コミットハッシュ値についてもっと深く知りたい方は、こちらの記事が詳しいのでおすすめです。
ブランチの操作
-
今存在するブランチの確認
$ git branch
※アスタリスクのついているブランチが現在のブランチ
-
ブランチの作成
$ git branch <branch name>
-
ローカルブランチの作成をリモートにプッシュ
$ git push origin <branch name>
-
ブランチの移動
$ git checkout <branch name>
※指定したブランチへ移動する
-b
オプションを指定するとブランチの作成とチェックアウトを同時に行える-f
オプションを指定するとブランチを強制的に切り替えることができる(コミットしていない作業データは消えるため注意)
-
リモートブランチの反映
$ git fetch origin
-
ブランチの削除
$ git branch -d <branch name> # ローカルブランチの削除(強制削除する場合は`-D`オプションに変更) $ git push origin --delete <branch name> # リモートブランチの削除(`$ git push origin :<branch name>` でも可)
-
remote には存在するブランチが local には存在しない場合
$ git brantch -a
でブランチを表示
$ git checkout -b release origin/release
で解決できる!
-
ブランチのマージ:devブランチにmainブランチの内容をマージ(取り込む)
ただしマージしただけではリモートリポジトリに反映されないので、その後pushする必要あり
$ git checkout dev $ git fetch $ git merge origin/main
- コンフリクトした場合に強制的にマージする際は、フェッチした後に
$ git reset --hard origin/main
- コンフリクトした場合に強制的にマージする際は、フェッチした後に
-
logの確認
$ git log
- option:
- –graph: グラフ形式で表示
- –decorate=“short”: ブランチ名の表示形式を変更 # select “short”, “full”, or “no”
- –date=“relative”: 日時表示 # select “relative”, “local”, “default”, “iso”, “rfc”, “short”, or “raw”
- option:
-
shtash: 変更内容を隠す
$ git stash $ git stash save "comment" # コメント付きでstash $ git stash list # stashした内容の一覧を表示 $ git stash apply # stashした内容を再度適用(stashした内容は保持) $ git stash pop # stashした内容を再度適用(stashした内容は削除) $ git stash drop stash@{1} # stashした内容を削除 $ git stash clear # stashした内容を全て削除
参考
Repository Access Restrictions
group内で作成したrepositoryのアクセス権限を設定する方法
- 操作したいrepositoryの
settings
をクリック - 左の
Access
のCollaborators and teams
をクリックし、パスワードを入力 Add people
またはAdd teams
をクリックし、アクセスを許可するpeopleまたはgroupを追加する
How to Create Repository
ローカルリポジトリの作成
-
リモートリポジトリに登録したいディレクトリにして次のコマンドでバージョン管理のための初期化を行う。
$ git init
これで,ローカルリポジトリ(.git/)が作られ,
git init
を実行したディレクトリが作業ディレクトリになる。以下のように
git init
でローカルリポジトリ用のディレクトリを新規作成することもできる。$ git init <target directory> $ cd <target directory>
-
.gitignoreの作成 gitコマンドでは無視したいファイルが有る時(LaTeXの一時ファイル等)は,.gitignoreという名前のファイルを作っておく。 以下は例。latex関連の一時ファイルを無視するように設定している。
$ cat .gitignore *.aux *.idx *.log *.toc *.ist *.bbl *.blg *.dvi *.ilg *.ind *.lot *.out *.synctex.gz *~
ローカルリポジトリに登録するファイルやディレクトリの指定
下記のいずれかのコマンドで登録するファイルやディレクトリを指定
$ git add . # 現在のディレクトリにある全てのファイル/ディレクトリを登録
$ git add figures/ # ディレクトリ figures/ 以下のファイルを登録
$ git add *.tex # すべての .tex ファイルを登録
$ git add <ファイル名> #特定のファイルのみを登録
ローカルリポジトリにファイル登録
git add
で指定したファイルやディレクトリを,ローカルリポジトリに登録する。
$ git commit -m "first commit"
-mは1行コメントをつけるオプション。 更新したファイルをローカルリポジトリに反映するときにも,同様にgit addとgit commitを実行する。ここまではローカルリポジトリの管理。
gitサーバ上で新規リモートリポジトリを登録
-
GitHubにログイン
-
左上の
Repositories
の隣りにあるNew
のタブをクリック -
repository作成ページで以下のことを記入
- Repository name : リポジトリの名前
- Description : リポジトリの内容
Public / Private
の選択
-
Create repository
をクリック -
リポジトリ作成後のすべきこと(コマンドライン)が記載されたページが表示されるので、URLの覧をチェックしておく。以下はその一例。
echo "# re" >> README.md git init git add README.md git commit -m "first commit" git branch -M main git remote add origin https://github.com/<ユーザーネーム>/<repository名>.git git push -u origin main
-
コマンドラインの上に
HTTPS
かSSH
かを選択する覧もあるので、SSH
にする場合はここで選択しておく
- 参照
トークンの作成
2021年8月13日以降、GitHubのリポジトリにアクセスするには、ユーザ名とパスワードではなくアクセストークンが必要になった。
- GitHubにログイン
- 右上のアイコンをクリックし、一覧から
Settings
をクリック - 左下の
Developer settings
をクリック - 左の覧から
Personal avvess tokens
をクリック - 右上の
Generate new token
をクリックしてアクセストークンを作成 - 以下のことを記入
Note : トークン名
Expiration : トークンが使用できる期限。この期限が切れると新しくトークンを作成する必要がある。(上限あり)
Select scopes : 少なくともrepoの覧はチェックを入れること。
トークンは一度ページを移動すると二度と見れなくなってしまうため、作成後はコピーして保存しておくこと!!!
Gitサーバへの登録
ローカルリポジトリとgitサーバ上のリモートリポジトリの紐付け
ローカルリポジトリ(要はgit管理したいプログラム群のあるディレクトリ)をgitサーバ上のリモートリポジトリと紐付ける。リモートリポジトリを作成した際に表示されたすべきこと(コマンドライン)を順次実行していく。 以下はその一例。
git branch -M main
git remote add origin https://github.com/<ユーザーネーム>/<repository名>.git
git push -u origin main
ただしURLの覧にはhttps://
とgithub.com/...
の間に<トークン>@
を加えて実行する。
$ git remote add origin https://<トークン>@github.com/<ユーザーネーム>/<repository名>.git
ユーザーネームとパスワードを求められたらユーザーネームには自分の登録名、パスワードにはトークンを打ち込む
git remote
は,サーバ上のファイル置き場(リモートリポジトリ)を登録する命令。 この例では,URL(https://github.com/<ユーザーネーム>/<repository名>.git)を,originという名前(識別子)で登録している。 識別子 origin は他の名前にしても良いが,慣習的にこの名称が使われている。 someone/somerepoの部分は,GitHub上に作ったリポジトリの名前に従って設定する。
ただし,非公開リポジトリ(private repository)に登録する場合は,以下のようにGitHubの認証情報を加える。
$ git remote add origin https://<username>@github.com/s<ユーザーネーム>/<repository名>.git
セキュリティを高めるためには,ssh keyをGitHubに登録しておいて,ssh通信にするほうが無難。この場合のgit rmoteは以下のなる。
$ git remote add origin git@github.com:someone/somerepo.git
登録情報の確認
$ git remote -v
登録情報を間違えていたら,以下のコマンドで一旦削除して再登録する
$ git remote rm origin
Settings
アカウントの作成
GitHubのホームページでアカウントを作成する
pro版(GitHub Education)への変更方法
- GitHub Educationにアクセス
- 右上のBenefitsをクリック
- IndividualsのGet student benefitsを選択
申し込むための資格が書いてあります。 学生であること。 学校からもらったメアドがあること。 GitHubアカウントを持っていること。 13歳以上であること。 Screenshot from 2020-09-23 15-02-45.png
Add an email address
から学校のアドレスを追加How do you plan to use GitHub?
にgithubの利用目的を記入Submit your information
を押して完了 ※利用目的は形式的なものなので(多分)適当に書いてOK!
参考ページ
Qiita , @Kobayashi2019「GitHub Educationのメリットと申請方法」
gitコマンドのインストール
git コマンドをローカルマシンにインストールする。 Mac OSの場合は,Xcode コマンドラインツールをインストールしていたら,gitコマンドもインストールされている。
apt-get対応のLinuxディストリビューションなら以下でたいていOK。
$apt-get install git
自分のアカウント情報のローカルマシンへの登録
$git config --global user.name <ユーザーネーム>
$git config --global user.email <登録したメールアドレス>
$git config --global core.editer vi #コメント編集につかいたいエディタを設定(デフォルトはvi)
--global
は,ローカルリポジトリ作成時のデフォルト設定にするためのオプション。 特定のリポジトリでのみ別の設定にしたいときには,ダウンロードしたポジトリ内に移動してから--local
を指定して実行する。
必要に応じてproxy設定
外部とのネットワーク接続にproxy設定が必要な環境の場合は,Proxy設定のページを見て設定をする。ターミナルとgitのproxy設定をする。