WindowsでGitとBitBucketを使い始めたばかりで、Bashに精通していない人のためにこれを書いてください(これは一般的な問題であり、質問内のエラーメッセージを検索すると、Googleの上位の結果になるためです)。
HTTPSを気にせず、簡単な解決策を探している人は、この回答の下部までスクロールして、「THE THE LAZY」の説明を参照してください
実際の問題を解決したい場合は、以下の手順に従ってください。
SSHの問題をできるだけ早く修正する
これは、VonCによってリンクされたURLから派生した一連の指示です。できるだけ弾力性があり、簡潔になるように変更されました。
まだ設定していない場合は、グローバル情報を設定します。
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
OpenSSHを確認します。
$ ssh -v localhost
OpenSSH_4.6p1, OpenSSL...
そのようなものを参照してください?
- はい:続行します。
- いいえ:FOR THE LAZYセクションにスキップするか、VonCのリンクされた記事に従ってください。
キーがすでに生成されているかどうかを確認します。
$ ls -a ~/.ssh/id_*
ファイルが2つある場合は、次の手順をスキップできます。
$ ssh-keygen
すべてをデフォルトのままにして、パスフレーズを入力します。次のコマンドで結果が表示されます。
$ ls -a ~/.ssh/id_*
既存の構成ファイルを確認します。
$ ls -a ~/.ssh/config
結果が得られた場合は、このファイルで誤った情報を確認してください。ファイルが存在しない場合は、以下を実行します。
$ echo "Host bitbucket.org" >> ~/.ssh/config
$ echo " IdentityFile ~/.ssh/id_rsa" >> ~/.ssh/config
内容を確認します。
$ cat ~/.ssh/config
Host bitbucket.org
IdentityFile ~/.ssh/id_rsa
- 「IdentityFile」の前の単一のスペースが必要です。
GitBashを実行するたびにSSHエージェントを起動していることを確認します。
$ cat ~/.bashrc
- という関数が表示された場合
start_agent
、このステップはすでに完了しています。
- ファイルがない場合は、続行します。
- この機能を含まないファイルがある場合、あなたは厄介な状況にあります。(以下の手順を使用して)追加することはおそらく安全ですが、そうでない場合があります!不明な場合は、以下の手順を実行する前に.bashrcのバックアップを作成するか、スキップして「FOR THE LAZY」セクションに進んでください。
以下をGitBashに入力して、.bashrcファイルを作成します。
$ echo "SSH_ENV=$HOME/.ssh/environment" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "# start the ssh-agent" >> ~/.bashrc
$ echo "function start_agent {" >> ~/.bashrc
$ echo " echo \"Initializing new SSH agent...\"" >> ~/.bashrc
$ echo " # spawn ssh-agent" >> ~/.bashrc
$ echo " /usr/bin/ssh-agent | sed 's/^echo/#echo/' > \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo " echo succeeded" >> ~/.bashrc
$ echo " chmod 600 \"\${SSH_ENV}\"" >> ~/.bashrc
$ echo " . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo " /usr/bin/ssh-add" >> ~/.bashrc
$ echo "}" >> ~/.bashrc
$ echo "" >> ~/.bashrc
$ echo "if [ -f \"\${SSH_ENV}\" ]; then" >> ~/.bashrc
$ echo " . \"\${SSH_ENV}\" > /dev/null" >> ~/.bashrc
$ echo " ps -ef | grep \${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {" >> ~/.bashrc
$ echo " start_agent;" >> ~/.bashrc
$ echo " }" >> ~/.bashrc
$ echo "else" >> ~/.bashrc
$ echo " start_agent;" >> ~/.bashrc
$ echo "fi" >> ~/.bashrc
ファイルが正常に作成されたことを確認します(「yourusername」が表示されている場所のみが異なります)。
$ cat ~/.bashrc
SSH_ENV=/c/Users/yourusername/.ssh/environment
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
/usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
echo succeeded
chmod 600 "${SSH_ENV}"
. "${SSH_ENV}" > /dev/null
/usr/bin/ssh-add
}
if [ -f "${SSH_ENV}" ]; then
. "${SSH_ENV}" > /dev/null
ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
start_agent;
}
else
start_agent;
fi
- GitBashを閉じて、再度開きます。
- パスフレーズを要求されます(以前に生成したSSHファイル用)。
- プロンプトが表示されない場合は、パスフレーズを設定していないか、GitBashが.bashrcスクリプトを実行していません(奇妙なため、内容を確認することを検討してください)。これをMac(OS X)で
.bashrc
実行している場合、デフォルトでは実行されません- .bash_profile
です。これを修正するには、このスニペットをあなたの中に入れてください.bash_profile
:[[ -s ~/.bashrc ]] && source ~/.bashrc
パスフレーズを入力しなかった場合、GitBashの起動時に次のようなものが表示されます。
Initializing new SSH agent...
succeeded
Identity added: /c/Users/yourusername/.ssh/id_rsa (/c/Users/yourusername/.ssh/id_rsa)
そして、以下は結果を返すはずです:
$ ssh-add -l
ただし、次の場合ssh-add -l
:
Could not open a connection to your authentication agent.
SSHエージェントを生成しなかったため、おそらく.bashrcが原因です。
GitBashを起動すると、次のように表示されます。
Initializing new SSH agent...
sh.exe": : No such file or directory
これは、ファイルにエコーするときに$を\でエスケープするのを忘れたことを意味します(つまり、変数が展開されました)。これを解決するには、.bashrcを再作成します。
エージェントが実行中であり、キーが追加されていることを確認します。
$ ssh-add -l
これに似たものを返すはずです:
2048 0f:37:21:af:1b:31:d5:cd:65:58:b2:68:4a:ba:a2:46 /Users/yourusername/.ssh/id_rsa (RSA)
次のコマンドを実行して、公開鍵を取得します。
$ cat ~/.ssh/id_rsa.pub
(「ssh-rsa……」で始まるものを返すはずです
- GitBashウィンドウのアイコンをクリックします
- 編集をクリックします
- マークをクリック
- マウスを使用して公開鍵を強調表示します(リーディング
ssh-rsa
ビットとトレーリング== youremail@yourdomain.com
ビットを含む)。
- ウィンドウを右クリック(コピーを実行)
- 公開鍵をメモ帳に貼り付けます。
- すべての改行を削除して、1行だけになるようにします。
CTRL+A
次に、CTRL+C
を押して、公開鍵を再びクリップボードにコピーします。
次の手順を実行して、BitBucketで秘密鍵を構成します。
- ブラウザーを開き、BitBucket.orgサイトに移動します。
- BitBucket.orgにログイン
- アバターをクリックします(右上)
- [アカウントの管理]をクリックします
- (左側のメニューの[セキュリティ]の下にある)[SSHキー]をクリックします。
- キーの追加をクリックします
Global Public Key
ラベルを入力してください
- メモ帳からコピーした公開鍵を貼り付けます
Global Public Key
エントリは今のキーのリストに表示されるはずです。
- GitBashに戻る
- プロジェクトを含むディレクトリにcdします
- オリジンをSSHバリエーションに変更します(FOR THE LAZYステップを実行した場合は変更されません)。
リモコンを確認します。
$ git remote -v
SSH URLに切り替えます。
$ git remote set-url origin git@bitbucket.org:youraccount/yourproject.git
正常に動作していることを確認します。
$ git remote show origin
次のようなものが表示されます。
Warning: Permanently added the RSA host key for IP address '...' to the list of known hosts.
* remote origin
Fetch URL: git@bitbucket.org:youruser/yourproject.git
Push URL: git@bitbucket.org:youruser/yourproject.git
HEAD branch: master
Remote branch:
master tracked
Local ref configured for 'git push':
master pushes to master (fast-forwardable)
できた!
SSHの代わりにHTTPSを使用することを選択できます。リモート操作中にパスワードを入力する必要があります(一度入力すると一時的にキャッシュされます)。HTTPSの設定方法は次のとおりです。
レイジーのために
VonCの説明に従ってSSHの問題を修正する必要があります。ただし、急いでコミットしていて、現在新しい公開鍵を生成するツール/時間/知識がない場合は、オリジンをHTTPS代替に設定します。
> https://accountname@bitbucket.org/accountname/reponame.git
TortoiseGitやコマンドラインツールなどのGUIツールを使用する。
これは、この代替オリジンURLのドキュメントです。
オリジンが存在しない場合にオリジンを追加するコマンドライン:
git remote add origin https://accountname@bitbucket.org/accountname/reponame.git
既存の原点を変更するコマンドライン:
git remote set-url origin https://accountname@bitbucket.org/accountname/reponame.git
注:アカウント名はメールではありません。
グローバル情報を設定することもできます:
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
その後、もう一度プッシュしてみてください(再度コミットする必要はありません)
git push origin master