GitHubのレポジトリを作成して実際に自分で書いたコードを公開するまでを解説します。
  

💁‍♀️

いよいよ自分のコードをGitHubで公開してみるよ!






    Strory
  1. 前提条件
  2. レポジトリの作成
  3. レポジトリのファイルについて
  4. GitHubでコードを公開

前提条件

MacOSXのバージョン

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.14.4
BuildVersion:   18E226

Gitの初期設定

別記事で設定方法をまとめているので、参考にしてください。

Gitの初期設定をやってみよう

SSH Keyの作成

別記事で設定方法をまとめているので、参考にしてください。

GitHubでSSH接続するためのSSH Keyを作成しよう

レポジトリの作成

アカウントの右上の+マークからNew repositoryをクリックします。

新しいレポジトリの作成画面

次に各項目を埋めて行きます。

  • Repository name: レポジトリの名前
  • Description: レポジトリの説明(空白可)
  • Public、Private: 公開か非公開
  • Initialize this repository with a README: リポジトリの初期化とREADMEファイルの設置
  • Add .gitignore: バージョン管理しなくて良いファイルが書かれた.gitgnoreファイルの作成。
  • Add a licence: ライセンスが書かれたLICENSEファイルの作成

※2019/1/7から無償プランでも公開設定をPrivateが設定できるようになっています。
※Initialize this repository with a READMEに有効化するとレポジトリ作成後、すぐにcloneできるようになります。

新しいレポジトリの作成画面

レポジトリのファイルについて

以下のURLにレポジトリが作成されます。
https://github.com/[username]/[repositoryname]

README.md

レポジトリの概要を明記するファイルで、レポジトリのトップページに表示されます。

.gitignore

バージョンを管理しなくても良いファイルです。

GitHubでコードを公開

今回はptyhonで"hello"と出力される簡単なファイルを公開します。

hello.py

print("hello")

レポジトリをcloneする

自分の作業環境にレポジトリのクローンを作成します。 右上の**Clone or downloadをクリックすると表示されるURLをコピーします。

cloneするレポジトリのURL

そのURLをターミナルからCloneします。

$ git clone https://github.com/***/greeting.git
Cloning into 'greeting'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 1.56 KiB | 800.00 KiB/s, done.

公開するファイルをアップする

まず実際にレポジトリにファイルをアップする前にアップするまでの流れを簡単に説明します。

レポジトリにファイルをアップするフロー

作業環境から直接レポジトリにファイルをアップするのではなく、作業環境 > インデックス >ローカルレポジトリ > レポジトリの順にアップする流れになります。
インデックスには現在のファイルが管理されています。
インデックスを通すことで、ファイルの差分を見て違うファイルだけをレポジトリにあげることができます。
ローカルレポジトリは自分だけの管理場所、リポジトリ(リモートレポジトリ)は複数人で共有するための場所です。

上記の内容を簡単に理解した上で、ファイルをアップします。

インデックスに登録する

git addを使います。

$ git add hello.py

ローカルレポジトリにコミットする

コミットの際にコメントをつけることができます。

$ git commit -m "initial commit" 
 1 file changed, 1 insertion(+)
 create mode 100644 hello.py

コミットが成功したかどうかはgit logで確認することができます。

$ git log
commit ***
Author: ***
Date:   Sun Nov 5 09:22:55 2017 -0800

    first commit

レポジトリにプッシュする

最後にレポジトリにファイルをアップします。

$ git push
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 4 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 538 bytes | 538.00 KiB/s, done.
Total 5 (delta 0), reused 0 (delta 0)
To https://github.com/***/greeting.git
   09e04d4..b0891f5  master -> master

これでレポジトリを確認してファイルがアップされていれば成功です。





が、おそらく最初のpushは何かとエラーが起きがち... なので、解決策をいくつかあげておきます。

fatal: No configured push destination.の場合

リモートに追加してあげる。

$ git remote add greeting https://github.com/***/greeting.git

fatal: The current branch master has no upstream branchの場合

$ git push --set-upstream origin master

remote: Permission to natipoi/greeting.git denied to [username]の場合
意図しないユーザーでpushされる場合は昔にgithub.comで秘密鍵を登録しており、それが残っている可能性がある。
この場合はキーチェーンから昔の秘密鍵を削除する。

! [rejected] master -> master (fetch first)の場合
下の2つのコマンドを実行してからpushしてください。

$ git fetch && git merge origin/master
warning: no common commits
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), 1.56 KiB | 533.00 KiB/s, done.
From https://github.com/.../greeting
 * [new branch]      master     -> origin/master
fatal: refusing to merge unrelated histories 
$ git merge --allow-unrelated-histories origin/master
Merge made by the 'recursive' strategy.
 .gitignore | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 README.md  |   1 +
 2 files changed, 130 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 README.md