git 怎么备份本地分支_如何备份本地Git存储库?

我开始对Yar的脚本进行一些黑客攻击,结果是在GitHub上,包括手册页和安装脚本:

安装:git clone "https://github.com/najamelan/git-backup.git"

cd git-backup

sudo ./install.sh

欢迎对GitHub的所有建议和请求。#!/usr/bin/env ruby## For documentation please sea man git-backup(1)## TODO:# - make it a class rather than a function# - check the standard format of git warnings to be conform# - do better checking for git repo than calling git status# - if multiple entries found in config file, specify which file# - make it work with submodules# - propose to make backup directory if it does not exists# - depth feature in git config (eg. only keep 3 backups for a repo - like rotate...)# - TESTING# allow calling from other scriptsdef git_backup# constants:git_dir_name    = '.git'          # just to avoid magic "strings"filename_suffix = ".git.bundle"   # will be added to the filename of the created backup# Test if we are inside a git repo`git status 2>&1`if $?.exitstatus != 0

puts 'fatal: Not a git repository: .git or at least cannot get zero exit status from "git status"'

exit 2else # git status success

until        File::directory?( Dir.pwd + '/' + git_dir_name )             \            or  File::directory?( Dir.pwd                      ) == '/'

Dir.chdir( '..' )

end

unless File::directory?( Dir.pwd + '/.git' )

raise( 'fatal: Directory still not a git repo: ' + Dir.pwd )

endend# git-config --get of version 1.7.10 does:## if the key does not exist git config exits with 1# if the key exists twice in the same file   with 2# if the key exists exactly once             with 0## if the key does not exist       , an empty string is send to stdin# if the key exists multiple times, the last value  is send to stdin# if exaclty one key is found once, it's value      is send to stdin## get the setting for the backup directory# ----------------------------------------directory = `git config --get backup.directory`# git config adds a newline, so remove itdirectory.chomp!# check exit status of git configcase $?.exitstatus   when 1 : directory = Dir.pwd[ /(.+)\/[^\/]+/, 1]

puts 'Warning: Could not find backup.directory in your git config file. Please set it. See "man git config" for more details on git configuration files. Defaulting to the same directroy your git repo is in: ' + directory   when 2 : puts 'Warning: Multiple entries of backup.directory found in your git config file. Will use the last one: ' + directory   else     unless $?.exitstatus == 0 then raise( 'fatal: unknown exit status from git-config: ' + $?.exitstatus ) endend# verify directory existsunless File::directory?( directory )

raise( 'fatal: backup directory does not exists: ' + directory )end# The date and time prefix# ------------------------prefix           = ''prefix_date      = Time.now.strftime( '%F'       ) + ' - ' # %F = YYYY-MM-DDprefix_time      = Time.now.strftime( '%H:%M:%S' ) + ' - 'add_date_default = trueadd_time_default = falseprefix += prefix_date if git_config_bool( 'backup.prefix-date', add_date_default )prefix += prefix_time if git_config_bool( 'backup.prefix-time', add_time_default )# default bundle name is the name of the repobundle_name = Dir.pwd.split('/').last# set the name of the file to the first command line argument if givenbundle_name = ARGV[0] if( ARGV[0] )bundle_name = File::join( directory, prefix + bundle_name + filename_suffix )puts "Backing up to bundle #{bundle_name.inspect}"# git bundle will print it's own error messages if it fails`git bundle create #{bundle_name.inspect} --all --remotes`end # def git_backup# helper function to call git config to retrieve a boolean settingdef git_config_bool( option, default_value )

# get the setting for the prefix-time from git config

config_value = `git config --get #{option.inspect}`

# check exit status of git config

case $?.exitstatus      # when not set take default

when 1 : return default_value      when 0 : return true unless config_value =~ /(false|no|0)/i      when 2 : puts 'Warning: Multiple entries of #{option.inspect} found in your git config file. Will use the last one: ' + config_value               return true unless config_value =~ /(false|no|0)/i      else     raise( 'fatal: unknown exit status from git-config: ' + $?.exitstatus )

endend# function needs to be called if we are not included in another scriptgit_backup if __FILE__ == $0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值