我想要一个更新git repo的脚本。我希望它更新repo如果存在repo的文件夹,并且我想克隆repo,如果没有这样的文件夹。
我想为该脚本指定2件事:
ssh://git.example.com/var/git/repo.git
)/var/lib/git/repo
)编写这种脚本并不是很难,但我认为这项任务很常见,已经解决了。
任务非常简单,但有些事情应该仔细完成。例如,repo的主分支不能是master,而是其他东西,如果出现错误,脚本应该给出非零退出状态,如果repo中有一些变化,它应该有效,等等。
所以我的问题 - 我可以用什么脚本来仔细解决克隆或更新回购的任务。
答案 0 :(得分:3)
这是简单的红宝石代码
REPO_PATH = '/Users/full_path/to_repo'
REPO_NAME = 'xxx'
GITHUB_URL = 'git@github.com:xxx/xxx.git'
def change_dir_to_repo
Dir.chdir(REPO_PATH)
puts system('pwd')
end
def git_repo_exists?
if Dir.exists?(REPO_NAME)
puts "Git repo #{REPO_NAME} exists."
update_git_repo
else
puts "Git repo #{REPO_NAME} does not exists."
clone_git_repo
end
end
def clone_git_repo
system("git clone #{GITHUB_URL}")
puts "Done"
end
def update_git_repo
puts "Changing directory to #{REPO_NAME}"
Dir.chdir(REPO_NAME)
puts "Changing branch to master"
system('git checkout master')
puts "updating git repo"
system('git pull')
puts "Done"
end
change_dir_to_repo
git_repo_exists?
答案 1 :(得分:1)
如果我很快就必须这样做,我会尝试节点,因为它为git集成提供了一些好的库,我认为现在比bash更容易,如果你不习惯它们中的任何一个。该脚本将执行以下操作:
1)导航到文件夹并执行一个简单的git status
,任何命令都可以,因为如果它不是git repo它会这样说:
fatal: Not a git repository
1.a)如果它不是一个git repo,那么一个简单的“git clone url”就可以解决这个问题并且脚本存在了
2.a)好的,所以它没有错误,git状态会给你一个没有变化的干净分支,或者它会告诉你有变化
2.a.a)如果您想立即更新,请运行“git pull --ff-only”,以防止意外的合并。如果失败了,那么我认为你应该手动解决问题。
2.a.b)如果您有本地更改,我也会退出脚本。
要使用的库:
我喜欢gift但是如果你看一下npm还有很多其他人。如果您不想遵循我的建议,也可以使用bash脚本。
希望这会有所帮助。
答案 2 :(得分:0)
Van也可以在Build Server上运行
.attr('data-menu-button)
如果在构建服务器上运行,则Couleur appen git Status。