如何更新git repo或创建如果没有这样的repo

时间:2013-09-13 10:02:49

标签: git version-control git-pull git-clone

我想要一个更新git repo的脚本。我希望它更新repo如果存在repo的文件夹,并且我想克隆repo,如果没有这样的文件夹。

我想为该脚本指定2件事:

  • git remote url(例如ssh://git.example.com/var/git/repo.git
  • forder git repo应该在哪里(例如/var/lib/git/repo

编写这种脚本并不是很难,但我认为这项任务很常见,已经解决了。

任务非常简单,但有些事情应该仔细完成。例如,repo的主分支不能是master,而是其他东西,如果出现错误,脚本应该给出非零退出状态,如果repo中有一些变化,它应该有效,等等。

所以我的问题 - 我可以用什么脚本来仔细解决克隆或更新回购的任务。

3 个答案:

答案 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。