이 워크 플로우의 문제점을 설명 할 수 있습니까?
$ git init --bare bare
Initialized empty Git repository in /work/fun/git_experiments/bare/
$ git clone bare alice
Cloning into alice...
done.
warning: You appear to have cloned an empty repository.
$ cd alice/
$ touch a
$ git add a
$ git commit -m "Added a"
[master (root-commit) 70d52d4] Added a
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a
$ git push
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to '/work/fun/git_experiments/bare'
git push
내가 복제 한 저장소로 항상 푸시 하지는 않습니까?
답변
예, 문제는 “베어”에 커밋이 없다는 것입니다. 이것은 순서대로 저장소를 작성하는 경우 (첫 번째, 앨리스) 첫 번째 커밋에서만 발생하는 문제입니다. 시도해보십시오 :
git push --set-upstream origin master
이것은 처음에만 필요합니다. 나중에 정상적으로 작동합니다.
Chris Johnsen이 지적했듯이 push.default가 사용자 정의되어 있으면이 문제가 발생하지 않습니다. 나는 상류 / 추적을 좋아한다.
답변
만약 너라면:
git push origin master
맨손으로 리포 지합니다.
Alice Repo가 올바르게 추적하지 않는 것 같습니다.
cat .git/config
기본 원격 및 분기가 표시됩니다.
만약 너라면
git push -u origin master
원격 및 지점 추적을 시작해야합니다. 해당 옵션이 항상 자식인지 확실하지 않습니다.
답변
이 관련 질문에 대한 답변은 저에게 해결책을 제공했습니다 … 그것은 단지 멍청한 실수였습니다.
먼저 커밋하십시오!
https://stackoverflow.com/a/7572252
아직 로컬 리포지토리에 커밋하지 않은 경우 푸시 할 내용이 없지만 Git 오류 메시지가 도움이되지 않습니다.
답변
git push --all
모든 것을 새로운 베어 리포지토리로 푸시하는 정식 방법입니다.
동일한 작업을 수행하는 또 다른 방법은 새로운 비 저장 리포지토리를 만든 다음 다음과 같이 베어 클론을 만드는 것입니다.
git clone --bare
그런 다음 사용
git remote add origin <new-remote-repo>
원래 (비 베어) 저장소에.
답변
alice
밀어 넣기 전에 저장소 에서 이것을 시도하십시오 .
git config push.default tracking
또는을 사용하여 사용자의 기본값으로 구성하십시오 git config --global …
.
git push
기본적으로 origin
리포지토리 (일반적으로 현재 리포지토리를 복제 한 리포지토리)로 설정되지만 기본적으로 현재 분기를 푸시하지는 않습니다. 기본적으로 소스 리포지토리와 대상 리포지토리 모두에있는 분기 만 푸시합니다.
push.default
구성 변수 (참조 자식-설정을 (1) ) 어떤 컨트롤 git push
이 (저장소 이름 뒤에 즉, 무언가를) 어떤 “refspec”인자가되지 않을 때 밀어 것입니다. 기본값은 위에서 설명한 동작을 제공합니다.
가능한 값은 다음과 같습니다 push.default
.
-
nothing
이렇게하면“refspec”이 제공됩니다. -
matching
(기본값) 소스 리포지토리와 대상 리포지토리에 모두 존재하는 모든 분기를
푸시 합니다.
이것은 현재 체크 아웃 된 브랜치와 완전히 독립적입니다. -
upstream
또는tracking
(두 값 모두 같은 의미입니다. 후자는 “원격 추적”분기와 혼동을 피하기 위해 더 이상 사용되지 않습니다. 전자는 1.7.4.2에 도입되었으므로 Git 1.7.3.1을 사용하는 경우 후자를 사용해야합니다. )
현재 분기를 “업스트림”구성으로 지정된 분기로 푸시합니다. -
current
이것은 현재 브랜치를 목적지 저장소에서 동일한 이름의 브랜치로 푸시합니다.이 마지막 두 개는 일반적인 경우 (예 : 오리진 / 마스터 를 업스트림으로 사용 하는 로컬 마스터에서 작업 )와 동일하지만 로컬 브랜치의 이름이 “업스트림”브랜치와 다른 경우에는 다릅니다.
git checkout master # hack, commit, hack, commit # bug report comes in, we want a fix on master without the above commits git checkout -b quickfix origin/master # "upstream" is master on origin # fix, commit git push
와
push.default
동일upstream
(또는tracking
), 푸시는에 갈 것origin
‘의 마스터 지점입니다. 이 같을 때current
, 푸시는에 갈 것origin
‘의 quickfix 지점.
matching
설정이 업데이트됩니다 bare
의 마스터 가 설립 된 후 시나리오에서. 그것을 설정하기 위해 git push origin master
한 번 사용할 수 있습니다 .
그러나 upstream
설정 (또는 current
)은 예상 한 결과와 더 잘 일치하는 것처럼 보이므로 시도해 볼 수 있습니다.
# try it once (in Git 1.7.2 and later)
git -c push.default=upstream push
# configure it for only this repository
git config push.default upstream
# configure it for all repositories that do not override it themselves
git config --global push.default upstream
(또한 1.7.4.2 이전에 여전히 Git을 사용하고 있다면 tracking
대신 에을 사용해야 합니다 upstream
.)
답변
SourceTree git client를 사용 하는데 초기 commit / push 명령은 다음과 같습니다.
git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags --set-upstream origin master:master