在我的编码冒险中,我经常发现需要私下复制 GitHub 存储库。下面提供的脚本通过以下六个基本步骤优雅地完成此任务:

  • 将存储库克隆到本地磁盘。
  • 启动回购。
  • 使用新名称创建您自己的存储库(为了清楚起见,在前面添加“better-”)。
  • 将原始 URL 设置为您的新存储库(将 {liveinaus} 替换为您的用户名)。
  • 将更改推送到新存储库。
  • 完毕!享受您的私人仓库。
#!/bin/bash

# Get the repository name from the Git URL
get_repository_name() {
  url="$1"

  # Remove the "git@" prefix and the ".git" suffix from the URL
  repository_name="${url#*[@:]}"
  repository_name="${repository_name%.git}"

  # Extract the last component of the URL (repository name)
  repository_name="${repository_name##*/}"
  echo "$repository_name"
}

get_repository_clone_target() {
	local cloneTarget="$1"
	# Remove everything before github.com/
	cloneTarget="${cloneTarget#*github.com/}"

	# Append .git if not exists
	if [[ $cloneTarget != *.git ]]; then
		cloneTarget="$cloneTarget.git"
	fi

	# Prepend [email protected]: if not exists
	if [[ $cloneTarget != [email protected]:* ]]; then
		# Append "[email protected]:" to the URL
		cloneTarget="[email protected]:$cloneTarget"
	fi

	echo "$cloneTarget"
}

github-copy-repo-action() {
	local cloneTarget=$(get_repository_clone_target "$1")
	local newRepoName="${2:-better-$(get_repository_name "$cloneTarget")}"
	local username="${3:-liveinaus}"

	# echo "$cloneTarget"
	# echo "$newRepoName"
	# echo "$username"

	git clone $cloneTarget $newRepoName
	cd $newRepoName
	git init
	gh repo create $newRepoName --private
	git remote set-url origin [email protected]:$username/$newRepoName.git
	git push -u
	echo $'\n\033[1;32m'"✔✔✔  "$'\033[0mFinished copying github repo to $newRepoName\n'
}

github-copy-repo-action "$@"

这段编码之旅的核心在于无数个小时的奉献和热情。每一行代码、每次调试和每一次突破都证明了我对这门手艺的热爱。当您探索本博客中分享的想法和概念时,我恳请您通过引用原始来源来尊重所涉及的工作。让我们一起在编码社区内培养尊重、协作和认可的文化。快乐编码!