でこれを使用している「ベスト」は常にトリッキーですが、GitHubのを使用しているので、リポジトリが公開され、少なくともあれば、非常に便利常にパスワードフリーの代替があります。あなたはすでに知っているように、インターネット・携帯電話に別の(外国)のGitを呼び出すためにあなたのGitのために
、あなたは、ssh://url
またはhttp://url
またはhttps://url
を使用することができます。これらはそれぞれ異なるポートとプロトコルを使用します。 ssh
は、公開鍵と秘密鍵を使用するセキュアシェルを使用します。 http
は、セキュリティで保護されていない(SSL/TLSなし)Webブラウザスタイルのアクセスを使用します。 https
は、セキュリティで保護された(SSL/TLS)ウェブブラウザスタイルのアクセスを使用します。最後のものにはパスワードが必要で、最初のものには鍵が必要です。中間のものは何も必要ありません。
これは1つの方法です。しかし、Gitにはさらに効率的なgit
スキームがあります。git://url
はhttp://url
と同じ意味ですが、Gitポートとプロトコルを使用します。これも認証されていないため、パスワードは必要ありません。公共アクセスが必要なのは、http://url
と同じです。 GitHubもこれをサポートしています。
リポジトリが公開されていない場合、格納されているsshキーが機能します。しかし、アクセスを許可するsshキーがあれば、それはおそらくプッシュにも十分です。なぜこれが最初の問題であるのかわかりません。
この質問を入力すると、フェッチのURLをsshを使用してhttpsを使用するように変更できることがわかりました。
はい、またはプロトコルなどのhttp
又はgit
(URLの「スキーム」部分)と同じ。実際、Gitは1つのリモート用に2つのURLをサポートしているので、リモートのフェッチURL(remote.origin.url
)をパスワードなしのバージョンに、リモートのプッシュURL(remote.origin.pushurl
)をパスワードベースのバージョンに設定するだけです。言っ
は、このスクリプトではマイナーな傷や2があります:HEAD
は「デタッチ」である
git fetch --prune
branchname=$(git rev-parse --abbrev-ref HEAD);
場合はbranchname=HEAD
を取得しますので、これはちょうど、HEAD
を印刷します。それは何をするおそらく良いでしょう:
branchname=$(git symbolic-ref -q --short HEAD) || die "not on a branch"
(die
はメッセージを出力して終了します場所)
changes=$(git log origin/$branchname ^HEAD);
これは、現在のブランチのための上流は、同じ名前が付けられていることを前提としてい現在のブランチ。それは事実ではないかもしれませんし、実際には上流には存在しないかもしれません。まさに最後のケース(なし上流のセット)のために行うには、あなた次第ですが、テストすることができ:
(これはGitの自体がfatal: no upstream configured for branch 'master'
を印刷したり、現在あるものは何でも、分岐することができます)。
if [[ ! -z "$changes" ]]; then
echo "You may not have the latest ..."
echo ""
fi
あなただけの今、フェッチされた上流の「先の」現在のブランチ任意のリビジョンがあるかどうかをテストしようとしているので、あなたは完全なgit log
を必要としません。
n=$(git rev-list --count [email protected]{upstream}) || exit
if [ $n -gt 0 ]; then ...; fi
と
git rev-list --count
は自動的に失敗するようになりましたあなたも、支店名やその上流を見つける必要がありません:あなたはこれらのリビジョンをカウントすることができ
$ git checkout --detach HEAD
HEAD is now at cf11a6797... Eleventh batch for 2.13
$ git rev-list --count [email protected]{u}
fatal: HEAD does not point to a branch
$ git checkout diff-merge-base
Switched to branch 'diff-merge-base'
$ git rev-list --count [email protected]{u}
fatal: no upstream configured for branch 'diff-merge-base'
$ git checkout master
Switched to branch 'master'
Your branch is behind 'origin/master' by 137 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
$ git rev-list --count [email protected]{u}
137
だから、我々は減らすことができますスクリプト全体へ:
n=$(git rev-list --count [email protected]{u}) || exit
if [ $n -gt 0 ]; then
echo ...
fi
私はgit pull
を推奨しません。 git fetch
が取得されたので、最新の情報に更新するにはgit merge
を実行してください。
うわー、これは非常に徹底して役立ちました。私はそれが実際にはどのアカウントがプルとプッシュを行うのかは問題ではないことに気がついたので、重要なことは誰がコミットするのでsshキーを使って行くつもりです。 私は間違いなくあなたの提案を実装するつもりです、ありがとう! –