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コマンド