diff --git a/src/VCS/Adapter/Git/GitHub.php b/src/VCS/Adapter/Git/GitHub.php index 56bf657d..ada4dce2 100644 --- a/src/VCS/Adapter/Git/GitHub.php +++ b/src/VCS/Adapter/Git/GitHub.php @@ -857,6 +857,8 @@ public function generateCloneCommand(string $owner, string $repositoryName, stri $directory = escapeshellarg($directory); $rootDirectory = escapeshellarg($rootDirectory); + $isSubdirectory = $rootDirectory !== escapeshellarg('*'); + $commands = [ "mkdir -p {$directory}", "cd {$directory}", @@ -865,12 +867,20 @@ public function generateCloneCommand(string $owner, string $repositoryName, stri "git remote add origin {$cloneUrl}", // Enable sparse checkout "git config core.sparseCheckout true", + ]; + + // Disable cone mode for subdirectory checkouts (cone mode includes root-level files) + if ($isSubdirectory) { + $commands[] = "git config core.sparseCheckoutCone false"; + } + + $commands = array_merge($commands, [ "echo {$rootDirectory} >> .git/info/sparse-checkout", // Disable fetching of refs we don't need "git config --add remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'", // Disable fetching of tags "git config remote.origin.tagopt --no-tags", - ]; + ]); switch ($versionType) { case self::CLONE_TYPE_BRANCH: