我有一个Push
命令,运行这个脚本:
FindGits |
{
while read gitFolder; do
parent=$(dirname $gitFolder);
if [[ `git -C $parent status --porcelain` ]]; then
echo;
(
echo $parent;
git -C $parent status --porcelain
git -C $parent add .
git -C $parent commit -m "committed by script" 1>/dev/null 2>/dev/null
if [[ $? == 128 ]]; then
git -C $parent commit -m "commited by script" 1>/dev/null 2>/dev/null
git -C $parent push
if [[ $? == 1 ]]; then
git -C $parent pull
git -C $parent push
fi
else
git -C $parent push
if [[ $? == 1 ]]; then
git -C $parent pull
git -C $parent push
fi
fi
) &
fi
done
wait
}
但是,当我运行它时,git 会要求输入用户名:
“https://github.com”的用户名:
以下是我所做的测试,以确保 git 可以访问 GitHub:
ssh -T [email protected]
=> 成功sudo -i
+ => 成功ssh -T [email protected]
- 我进入 git 存储库,更改一些内容,然后手动添加 + 提交 + 推送 => 成功
- 我回到我的家,并使用
-C another_git_repo_path
=>成功从另一个存储库添加+提交+推送
那么为什么当我从脚本内部运行它时它不起作用?
答案1
如果您使用ssh
身份验证来处理 git 存储库(以及 make pull
、push
等),则必须将每个存储库配置为使用ssh
身份验证而不是https
,否则 git 命令将继续询问您的用户和密码。
要将存储库身份验证更改为,ssh
您可以使用以下命令:
git remote set-url origin [email protected]:UserName/Repo.git
- 或者在
.git/config
文件中您可以将其行更改url = https://github.com/
为:url = [email protected]:....
$> cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
url = [email protected]:UserName/Repo.git # edited line
fetch = +refs/heads/*:refs/remotes/origin/*