@@ -710,16 +710,17 @@ func (r *Repository) clone(ctx context.Context, o *CloneOptions) error {
710710 }
711711
712712 c := & config.RemoteConfig {
713- Name : o .RemoteName ,
714- URLs : []string {o .URL },
713+ Name : o .RemoteName ,
714+ URLs : []string {o .URL },
715+ Fetch : r .cloneRefSpec (o ),
715716 }
716717
717718 if _ , err := r .CreateRemote (c ); err != nil {
718719 return err
719720 }
720721
721722 ref , err := r .fetchAndUpdateReferences (ctx , & FetchOptions {
722- RefSpecs : r . cloneRefSpec ( o , c ) ,
723+ RefSpecs : c . Fetch ,
723724 Depth : o .Depth ,
724725 Auth : o .Auth ,
725726 Progress : o .Progress ,
@@ -789,21 +790,26 @@ const (
789790 refspecSingleBranchHEAD = "+HEAD:refs/remotes/%s/HEAD"
790791)
791792
792- func (r * Repository ) cloneRefSpec (o * CloneOptions , c * config.RemoteConfig ) []config.RefSpec {
793- var rs string
794-
793+ func (r * Repository ) cloneRefSpec (o * CloneOptions ) []config.RefSpec {
795794 switch {
796795 case o .ReferenceName .IsTag ():
797- rs = fmt .Sprintf (refspecTag , o .ReferenceName .Short ())
796+ return []config.RefSpec {
797+ config .RefSpec (fmt .Sprintf (refspecTag , o .ReferenceName .Short ())),
798+ }
798799 case o .SingleBranch && o .ReferenceName == plumbing .HEAD :
799- rs = fmt .Sprintf (refspecSingleBranchHEAD , c .Name )
800+ return []config.RefSpec {
801+ config .RefSpec (fmt .Sprintf (refspecSingleBranchHEAD , o .RemoteName )),
802+ config .RefSpec (fmt .Sprintf (refspecSingleBranch , plumbing .Master .Short (), o .RemoteName )),
803+ }
800804 case o .SingleBranch :
801- rs = fmt .Sprintf (refspecSingleBranch , o .ReferenceName .Short (), c .Name )
805+ return []config.RefSpec {
806+ config .RefSpec (fmt .Sprintf (refspecSingleBranch , o .ReferenceName .Short (), o .RemoteName )),
807+ }
802808 default :
803- return c .Fetch
809+ return []config.RefSpec {
810+ config .RefSpec (fmt .Sprintf (config .DefaultFetchRefSpec , o .RemoteName )),
811+ }
804812 }
805-
806- return []config.RefSpec {config .RefSpec (rs )}
807813}
808814
809815func (r * Repository ) setIsBare (isBare bool ) error {
@@ -821,9 +827,7 @@ func (r *Repository) updateRemoteConfigIfNeeded(o *CloneOptions, c *config.Remot
821827 return nil
822828 }
823829
824- c .Fetch = []config.RefSpec {config .RefSpec (fmt .Sprintf (
825- refspecSingleBranch , head .Name ().Short (), c .Name ,
826- ))}
830+ c .Fetch = r .cloneRefSpec (o )
827831
828832 cfg , err := r .Storer .Config ()
829833 if err != nil {
0 commit comments