同步操作将从 turnon/linux-tutorial 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#!/bin/sh#################################################################################### 此脚本用于检测 git 状态# Copy from https://github.com/fboender/multi-git-status#################################################################################### MIT licenseif [ -t 1 ]; then# Our output is not being redirected, so we can use colors.C_RED="0円33[1;31m"C_GREEN="0円33[1;32m"C_YELLOW="0円33[1;33m"C_BLUE="0円33[1;34m"C_PURPLE="0円33[1;35m"C_CYAN="0円33[1;36m"C_RESET="$(tput sgr0)"fiC_OK="$C_GREEN"C_LOCKED="$C_RED"C_NEEDS_PUSH="$C_YELLOW"C_NEEDS_PULL="$C_BLUE"C_NEEDS_COMMIT="$C_RED"C_NEEDS_UPSTREAM="$C_PURPLE"C_UNTRACKED="$C_CYAN"C_STASHES="$C_YELLOW"DEBUG=0usage() {cat << EOF >&2Usage: 0ドル [-w] [-e] [-f] [--no-X] [DIR] [DEPTH=2]Scan for .git dirs under DIR (up to DEPTH dirs deep) and show git status-w Warn about dirs that are not Git repositories-e Exclude repos that are 'ok'-f Do a 'git fetch' on each repo (slow for many repos)You can limit output with the following options:--no-push--no-pull--no-upstream--no-uncommitted--no-untracked--no-stashesEOF}# Handle commandline optionsWARN_NOT_REPO=0EXCLUDE_OK=0DO_FETCH=0NO_PUSH=0NO_PULL=0NO_UPSTREAM=0NO_UNCOMMITTED=0NO_UNTRACKED=0NO_STASHES=0while [ \! -z "1ドル" ]; do# Stop reading when we've run out of options.[ "$(echo "1ドル" | cut -c 1)" != "-" ] && breakif [ "1ドル" = "-h" ] || [ "1ドル" = "--help" ]; thenusageexit 1fiif [ "1ドル" = "-w" ]; thenWARN_NOT_REPO=1fiif [ "1ドル" = "-e" ]; thenEXCLUDE_OK=1fiif [ "1ドル" = "-f" ]; thenDO_FETCH=1fiif [ "1ドル" = "--no-push" ]; thenNO_PUSH=1fiif [ "1ドル" = "--no-pull" ]; thenNO_PULL=1fiif [ "1ドル" = "--no-upstream" ]; thenNO_UPSTREAM=1fiif [ "1ドル" = "--no-uncommitted" ]; thenNO_UNCOMMITTED=1fiif [ "1ドル" = "--no-untracked" ]; thenNO_UNTRACKED=1fiif [ "1ドル" = "--no-stashes" ]; thenNO_STASHES=1fishiftdoneif [ -z "1ドル" ]; thenROOT_DIR="."elseROOT_DIR="1ドル"fiif [ -z "2ドル" ]; thenDEPTH=2elseDEPTH="2ドル"fi# Find all .git dirs, up to DEPTH levels deepfind -L "$ROOT_DIR" -maxdepth "$DEPTH" -type d | while read -r PROJ_DIRdoGIT_DIR="$PROJ_DIR/.git"# If this dir is not a repo, and WARN_NOT_REPO is 1, tell the user.if [ \! -d "$GIT_DIR" ]; thenif [ "$WARN_NOT_REPO" -eq 1 ] && [ "$PROJ_DIR" != "." ]; thenprintf "${PROJ_DIR}: not a git repo\n"ficontinuefi[ $DEBUG -eq 1 ] && echo "${PROJ_DIR}"# Check if repo is lockedif [ -f "$GIT_DIR/index.lock" ]; thenprintf "${PROJ_DIR}: ${C_LOCKED}Locked. Skipping.${C_RESET}\n"continuefi# Do a 'git fetch' if requestedif [ "$DO_FETCH" -eq 1 ]; thengit --work-tree "$(dirname "$GIT_DIR")" --git-dir "$GIT_DIR" fetch -q > /dev/nullfi# Refresh the index, or we might get wrong results.git --work-tree "$(dirname "$GIT_DIR")" --git-dir "$GIT_DIR" update-index -q --refresh > /dev/null 2>&1# Find all remote branches that have been checked out and figure out if# they need a push or pull. We do this with various tests and put the name# of the branches in NEEDS_XXXX, seperated by newlines. After we're done,# we remove duplicates from NEEDS_XXX.NEEDS_PUSH_BRANCHES=""NEEDS_PULL_BRANCHES=""NEEDS_UPSTREAM_BRANCHES=""for REF_HEAD in $(cd "$GIT_DIR/refs/heads" && find . -type 'f' | sed "s/^\.\///"); do# Check if this branch is tracking an upstream (local/remote branch)UPSTREAM=$(git --git-dir "$GIT_DIR" rev-parse --abbrev-ref --symbolic-full-name "$REF_HEAD@{u}" 2> /dev/null)EXIT_CODE="$?"if [ "$EXIT_CODE" -eq 0 ]; then# Branch is tracking a remote branch. Find out how much behind /# ahead it is of that remote branch.CNT_AHEAD_BEHIND=$(git --git-dir "$GIT_DIR" rev-list --left-right --count "$REF_HEAD...$UPSTREAM")CNT_AHEAD=$(echo "$CNT_AHEAD_BEHIND" | awk '{ print 1ドル }')CNT_BEHIND=$(echo "$CNT_AHEAD_BEHIND" | awk '{ print 2ドル }')[ $DEBUG -eq 1 ] && echo "CNT_AHEAD_BEHIND: $CNT_AHEAD_BEHIND"[ $DEBUG -eq 1 ] && echo "CNT_AHEAD: $CNT_AHEAD"[ $DEBUG -eq 1 ] && echo "CNT_BEHIND: $CNT_BEHIND"if [ "$CNT_AHEAD" -gt 0 ]; thenNEEDS_PUSH_BRANCHES="${NEEDS_PUSH_BRANCHES}\n$REF_HEAD"fiif [ "$CNT_BEHIND" -gt 0 ]; thenNEEDS_PULL_BRANCHES="${NEEDS_PULL_BRANCHES}\n$REF_HEAD"fi# Check if this branch is a branch off another branch. and if it needs# to be updated.REV_LOCAL=$(git --git-dir "$GIT_DIR" rev-parse --verify "$REF_HEAD" 2> /dev/null)REV_REMOTE=$(git --git-dir "$GIT_DIR" rev-parse --verify "$UPSTREAM" 2> /dev/null)REV_BASE=$(git --git-dir "$GIT_DIR" merge-base "$REF_HEAD" "$UPSTREAM" 2> /dev/null)[ $DEBUG -eq 1 ] && echo "REV_LOCAL: $REV_LOCAL"[ $DEBUG -eq 1 ] && echo "REV_REMOTE: $REV_REMOTE"[ $DEBUG -eq 1 ] && echo "REV_BASE: $REV_BASE"if [ "$REV_LOCAL" = "$REV_REMOTE" ]; then: # NOOPelseif [ "$REV_LOCAL" = "$REV_BASE" ]; thenNEEDS_PULL_BRANCHES="${NEEDS_PULL_BRANCHES}\n$REF_HEAD"fiif [ "$REV_REMOTE" = "$REV_BASE" ]; thenNEEDS_PUSH_BRANCHES="${NEEDS_PUSH_BRANCHES}\n$REF_HEAD"fifielse# Branch does not have an upstream (local/remote branch).NEEDS_UPSTREAM_BRANCHES="${NEEDS_UPSTREAM_BRANCHES}\n$REF_HEAD"fidone# Remove duplicates from NEEDS_XXXX and make comma-seperatedNEEDS_PUSH_BRANCHES=$(printf "$NEEDS_PUSH_BRANCHES" | sort | uniq | tr '\n' ',' | sed "s/^,\(.*\),$/1円/")NEEDS_PULL_BRANCHES=$(printf "$NEEDS_PULL_BRANCHES" | sort | uniq | tr '\n' ',' | sed "s/^,\(.*\),$/1円/")NEEDS_UPSTREAM_BRANCHES=$(printf "$NEEDS_UPSTREAM_BRANCHES" | sort | uniq | tr '\n' ',' | sed "s/^,\(.*\),$/1円/")# Find out if there are unstaged, uncommitted or untracked changesUNSTAGED=$(git --work-tree "$(dirname "$GIT_DIR")" --git-dir "$GIT_DIR" diff-index --quiet HEAD -- 2> /dev/null;echo $?)UNCOMMITTED=$(git --work-tree "$(dirname "$GIT_DIR")" --git-dir "$GIT_DIR" diff-files --quiet --ignore-submodules --;echo $?)UNTRACKED=$(git --work-tree "$(dirname "$GIT_DIR")" --git-dir "$GIT_DIR" ls-files --exclude-standard --others)cd "$(dirname "$GIT_DIR")" || exitSTASHES=$(git stash list | wc -l)cd "$OLDPWD" || exit# Build up the status stringIS_OK=0 # 0 = Repo needs something, 1 = Repo needs nothing ('ok')STATUS_NEEDS=""if [ \! -z "$NEEDS_PUSH_BRANCHES" ] && [ "$NO_PUSH" -eq 0 ]; thenSTATUS_NEEDS="${STATUS_NEEDS}${C_NEEDS_PUSH}Needs push ($NEEDS_PUSH_BRANCHES)${C_RESET} "fiif [ \! -z "$NEEDS_PULL_BRANCHES" ] && [ "$NO_PULL" -eq 0 ]; thenSTATUS_NEEDS="${STATUS_NEEDS}${C_NEEDS_PULL}Needs pull ($NEEDS_PULL_BRANCHES)${C_RESET} "fiif [ \! -z "$NEEDS_UPSTREAM_BRANCHES" ] && [ "$NO_UPSTREAM" -eq 0 ]; thenSTATUS_NEEDS="${STATUS_NEEDS}${C_NEEDS_UPSTREAM}Needs upstream ($NEEDS_UPSTREAM_BRANCHES)${C_RESET} "fiif [ "$UNSTAGED" -ne 0 ] || [ "$UNCOMMITTED" -ne 0 ] && [ "$NO_UNCOMMITTED" -eq 0 ]; thenSTATUS_NEEDS="${STATUS_NEEDS}${C_NEEDS_COMMIT}Uncommitted changes${C_RESET} "fiif [ "$UNTRACKED" != "" ] && [ "$NO_UNTRACKED" -eq 0 ]; thenSTATUS_NEEDS="${STATUS_NEEDS}${C_UNTRACKED}Untracked files${C_RESET} "fiif [ "$STASHES" -ne 0 ] && [ "$NO_STASHES" -eq 0 ]; thenSTATUS_NEEDS="${STATUS_NEEDS}${C_STASHES}$STASHES stashes${C_RESET} "fiif [ "$STATUS_NEEDS" = "" ]; thenIS_OK=1STATUS_NEEDS="${STATUS_NEEDS}${C_OK}ok${C_RESET} "fi# Print the output, unless repo is 'ok' and -e was specifiedif [ "$IS_OK" -ne 1 ] || [ "$EXCLUDE_OK" -ne 1 ]; thenprintf "${PROJ_DIR}: $STATUS_NEEDS\n"fidone
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。