Github リポジトリの複製 フォーク

GitHubリポジトリを複製するフォークという機能があります。 フォークを活用することで、複製元となるオリジナルのリポジトリに影響なく、ファイル変更できます。

一般的には共同開発をしたいリポジトリをフォークし、フォークした先で変更を加えた後、 最終的にフォーク元(オリジナル)にその変更を反映させるという使い方です。

フォークの方法

複製元のリポジトリでフォークする

自分のアカウントにフォークで作成されたリポジトリが生成されている

フォークしたリポジトリをローカルで取得

リモートリポジトリのURLを取得

リモートリポジトリページ > code > SSH > URLをコピー

####ローカルリポジトリを作成したい場所へ移動(ターミナル)

$ cd /Users/xxx/Desktop/

クローンを実行

$ git clone git@github.com:acots715/ichiyasaGitSample.git

Git Hubに公開鍵を設定

SSH Keyを作成

1. SSH Keyを生成する

$ ssh-keygen -t ed25519 -C "メールアドレス"

-t : 鍵の種類を選択。安全面と性能面で最強なEd25519アルゴリズム -c:コメントを指定

実行結果

Generating public/private ed25519 key pair.
Enter file in which to save the key (/Users/xxxx/.ssh/id_ed25519):  //←これが出たらEnterキーを押す

『/Users/xxxx/.ssh/id_ed25519』はキーの保存先です。

2. パスワード入力

続いて下記の表示がされるのでSSH Keyを管理するためのパスワードを入力します。2回聞かれるので、2回入力。

Enter passphrase (empty for no passphrase):  //※パスワードは入力しても画面に何も表示されません。

SSH KeyをGit Hubに登録

1. 生成した公開鍵をクリップボードにコピー

GitHubの設定画面に登録するためにクリップボードにコピーします。 この時のコマンドはOSによって異なります

//MacOCの場合
$ pbcopy < /Users/xxxx/.ssh/id_ed25519.pub

2. Git Hubの設定画面表示

右のMyアイコン > setting > 左メニュー『SSH and GPG keys 』 > SSH Keys『New SSH Key』

3. 公開鍵を貼り付ける

  • タイトルを入力(どのパソコンで発行したキーかわかるようにしておくと便利)
  • Keyにクリップボードに貼り付けたキーをペースト
  • Add SSH keyをクリック

4.sshの鍵の読み込み分け設定 次に~/.ssh/configに読み分けの記載をします。configファイルがまだない場合は作成して保存

Host github 
    HostName github.com
    User git
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_ed25519
    UseKeychain yes
    AddKeysToAgent yes

正しく設定できたか確認

$ ssh -T git@github.com

実行結果

This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])?  //yes

実行結果

Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
Enter passphrase for key '/Users/xxxx/.ssh/id_ed25519':  //SSH key生成時に設定したパスワード

さらに実行結果

Hi! You've successfully authenticated, but GitHub does not provide shell access.

上記のように出たら成功。 『Permission denied』と表示されたら失敗なので、もう一度手順通りに設定し直します。

今までDreamweaverからgithubに接続できなくなっていたのが、解決できました。

複数githunアカウント作成する場合は、SSH Keyももう一度作成する必要があります。

$ ssh-keygen -t ed25519 -C "メールアドレス" -f "作成したい鍵の名前"

~/.ssh/config

Host github 
    HostName github.com
    User git
    PreferredAuthentications publickey
    IdentityFile ~/.ssh/id_ed25519
    UseKeychain yes
    AddKeysToAgent yes

Host github.com # 2つ目
  HostName github.com
  User git
  Port 22
  IdentityFile ~/.ssh/id_rsa_github_xxx  #2つめの鍵の名前
  TCPKeepAlive yes
  IdentitiesOnly yes
$ pbcopy < /Users/xxxx/.ssh/2つ目の鍵の名前.pub

github登録

正しく設定できたか確認

ssh -T git@github.com

Git 管理しないファイルを設定 .gitignore

Gitで管理すべきでないファイル

  • 自動生成されるファイル

ログファイル

パッケージファイル

バックアップファイル

  • OSのファイル

Windowsの Thumbs.db

macOSの.DS_Store

Dreamweaverを利用しているとできる_notesフォルダ(生成されたフォルダを削除する方法はこちら

Dreamweaver_notesフォルダの中にはdwsync.xmlファイル

  • パスワードが書かれたファイル

Gitで管理しないファイルを設定

1 .gitignoreファイルを作成

touch .gitignore

2 .gitignoreファイルに記述

subDirectory/file.md. //ファイル指定
target/  //フォルダ指定
*.log  //拡張子指定 

3 .gitignoreファイルをステージング

git add .gitignore

4 .gitignoreファイルをコミット

$ git commit -m ".gitignoreファイル追加"
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)

Github社の.gitignoreファイルテンプレートを利用

書き方に迷ったら下記を利用しても良いかと思います。個人的にはWordoress用のは便利そうです。

github.com

Git ファイルとステージングリアへの登録の両方を削除するgit rmコマンド

1.ファイル削除する git rm (フォルダ削除は git rm -r フォルダ名)

$ git rm remove.txt 
rm 'remove.txt'

2.状態を確認 git status

$ git status       
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    deleted:    remove.txt

3.削除したことをコミットする

$ git commit -m "remove.txtファイルを削除"
[master da8242d] remove.txtファイルを削除
 1 file changed, 1 deletion(-)

ローカルリポジトリでの操作の取り消し git checkoutとgit reset

ファイルの変更を取り消す(直前のコミットの状態に戻る) git checkout

  1. ファイルを変更
  2. git statusで確認するとworking treeにmodified(変更済み) ファイルが出る
  3. git checkoutコマンドでワークツリーの変更を取り消す(ファイルは直前のコミットの状態に戻る)
$ git checkout -- Git_MEMO.md

git checkout コマンドで取り消しできないケース

新規でファイル作成した時やファイル名を変更した時はgit checkoutが使えないので、手動でファイル削除します。

ステージングエリアへの登録を取り消す git reset HEAD ファイル名(ファイルの変更はしない)

ファイル変更し、ファイルをステージングエリアに登録 ステージングエリアへの登録を取り消す

$ git reset HEAD Git_MEMO.md 
Unstaged changes after reset: //resetによってunstagedされた
M   Git_MEMO.md

HEADは最後にコミットした状態を意味しています。

結論

ファイルの内容も変更前に戻したい時はgit checkoutコマンド ファイルの内容はそのままでステージングだけ戻したい時はgit reset HEADコマンド

Git 利用するエディターを指定・ファイル編集(コマンドライン)

VS codeコマンドラインから呼び出せるように設定

  1. VS code立ち上げる
  2. Shift + Command + P を押す
  3. 『shell』と入力
  4. 『シェルコマンド:PATH内に'code'コマンドをインストールします』をクリック

Gitで使用するエディターをVS Codeに指定する

$ git config --global core.editor "code --wait"

設定を確認

$ git config core.editor
code --wait

もしくは

$ git config --list
credential.helper=osxkeychain
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
filter.lfs.clean=git-lfs clean -- %f
user.name=xxxx
user.email=xxxxx
core.editor=code --wait
設定を削除したい時
$ git config --global --unset core.editor

ここまでを設定するとgitでコミットする際にVS codeが立ち上がるようになるはずが、 エラーが出た。

$ git commit
hint: Waiting for your editor to close the file... code --wait: code: command not found
error: There was a problem with the editor 'code --wait'.
Please supply the message using either -m or -F option.

エラー原因

VS Code内にてcodeコマンドを使用する設定ができていない為。

解決方法

VS codeで shift + command + p でコマンドパレットを開く 下記コマンドを実行

Shell Command: Install 'Code' command in path

パスワードを聞かれたら入力

もう一度、git commitしたら無事にVS codeが立ち上がりました。

###プロジェクトでファイル編集をするためにエディターを立ち上げる

$ code /Users/xxxx/Desktop/ichiyasaGitSample

プロジェクトのフォルダーごとエディターが立ち上がります。

Git ローカルリポジトリでの操作(コマンドライン)

ディレクトリにローカルリポジトリ作成

$ cd ichiyasa  //ディレクトリに移動
$git init //ローカルリポジトリ作成

Macの場合、コマンドの実行結果にhintが表示されることがありますが、特に操作は必要ありません。 標準のブランチ名をgit configコマンドを使って変更できると記載されています。

ディレクトリ内を確認

$ ls -a
.       ..      .git        Git_MEMO.md

ローカルリポジトリの状態を確認

$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    Git_MEMO.md

nothing added to commit but untracked files present (use "git add" to track)

『Untracked files』に表示されているファイルはGitの管理下に入っていないことを指します。

ステージングエリアに登録

git add Git_MEMO.md 

ファイル指定の書き方ですが下記のように指定できます。

$ git add . //カレントディレクトリ配下全て
$ git add subDirectory  //subDirectoryのディレクトリ全て
$ git add subDirectory/file.md  //subDirectoryのfile.mdのみ

ステージングエリアに登録されたことを確認

$ git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
    new file:   Git_MEMO.md

実行結果が『Untracked files』から『Changes to be committed:』に変更されました。

ファイルの差分を確認

git diff
diff --git a/Git_MEMO.md b/Git_MEMO.md
index 54f4fe1..0fdf6f4 100644
--- a/Git_MEMO.md
+++ b/Git_MEMO.md
@@ -1,2 +1,5 @@
-#Git 学習メモ
-## Gitコマンド
\ No newline at end of file
+# Git 学習メモ
+
+
+- ローカルリポジトリを作成する
+    - git init
\ No newline at end of file

実行結果の先頭に『+』がついていれば追加、『-』がついていれば削除

ステージングエリアとGitディレクトリ(前回のコミット)の差分を表示するオプション --cached
$ git diff --cached

ファイルをコミットする

$ git commit
hint: Waiting for your editor to close the file... 

1.自動的にVS codeが立ち上がる 行頭に#がついているのはコメントでコミットメッセージには含まれない。

2.コミットメッセージを書く

  • 1行目にコミットタイトルを書く(Gitの学習メモを作成)
  • 2行目は空白
  • 3行目から詳細を書く

この書き方がGitの公式サイトに書かれているおすすめの書き方です。

Git - git-commit Documentation

3.保存してVS codeを閉じる

[master (root-commit) 175f135]  Gitの学習メモ
 1 file changed, 2 insertions(+)
 create mode 100644 Git_MEMO.md

ターミナルに上記の実行結果が出る

ローカルリポジトリの状態を確認

$ git status
On branch master
nothing to commit, working tree clean

コミットメッセージ1行の時は素早くコミット -m

$ git commit -m "ローカルリポジトリの作成"
[master 4f15281] ローカルリポジトリの作成
 1 file changed, 5 insertions(+), 2 deletions(-)