正在显示
28 个修改的文件
包含
672 行增加
和
0 行删除
FETCH_HEAD
0 → 100644
1 | +a5bf1a6ce31cbb3fbe07b9700e1fa1c0651de4bd branch 'master' of http://114.215.101.231:8099/zhangxiaying/hunlian | ||
2 | +a5bf1a6ce31cbb3fbe07b9700e1fa1c0651de4bd not-for-merge branch 'Dev' of http://114.215.101.231:8099/zhangxiaying/hunlian | ||
3 | +a5bf1a6ce31cbb3fbe07b9700e1fa1c0651de4bd not-for-merge branch 'dev' of http://114.215.101.231:8099/zhangxiaying/hunlian |
config
0 → 100644
1 | +[core] | ||
2 | + repositoryformatversion = 0 | ||
3 | + filemode = false | ||
4 | + bare = false | ||
5 | + logallrefupdates = true | ||
6 | + symlinks = false | ||
7 | + ignorecase = true | ||
8 | +[remote "origin"] | ||
9 | + url = http://114.215.101.231:8099/zhangxiaying/hunlian.git | ||
10 | + fetch = +refs/heads/*:refs/remotes/origin/* | ||
11 | +[branch "master"] | ||
12 | + remote = origin | ||
13 | + merge = refs/heads/master |
description
0 → 100644
1 | +Unnamed repository; edit this file 'description' to name the repository. |
hooks/applypatch-msg.sample
0 → 100644
1 | +#!/bin/sh | ||
2 | +# | ||
3 | +# An example hook script to check the commit log message taken by | ||
4 | +# applypatch from an e-mail message. | ||
5 | +# | ||
6 | +# The hook should exit with non-zero status after issuing an | ||
7 | +# appropriate message if it wants to stop the commit. The hook is | ||
8 | +# allowed to edit the commit message file. | ||
9 | +# | ||
10 | +# To enable this hook, rename this file to "applypatch-msg". | ||
11 | + | ||
12 | +. git-sh-setup | ||
13 | +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" | ||
14 | +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} | ||
15 | +: |
hooks/commit-msg.sample
0 → 100644
1 | +#!/bin/sh | ||
2 | +# | ||
3 | +# An example hook script to check the commit log message. | ||
4 | +# Called by "git commit" with one argument, the name of the file | ||
5 | +# that has the commit message. The hook should exit with non-zero | ||
6 | +# status after issuing an appropriate message if it wants to stop the | ||
7 | +# commit. The hook is allowed to edit the commit message file. | ||
8 | +# | ||
9 | +# To enable this hook, rename this file to "commit-msg". | ||
10 | + | ||
11 | +# Uncomment the below to add a Signed-off-by line to the message. | ||
12 | +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg | ||
13 | +# hook is more suited to it. | ||
14 | +# | ||
15 | +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') | ||
16 | +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" | ||
17 | + | ||
18 | +# This example catches duplicate Signed-off-by lines. | ||
19 | + | ||
20 | +test "" = "$(grep '^Signed-off-by: ' "$1" | | ||
21 | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { | ||
22 | + echo >&2 Duplicate Signed-off-by lines. | ||
23 | + exit 1 | ||
24 | +} |
hooks/fsmonitor-watchman.sample
0 → 100644
1 | +#!/usr/bin/perl | ||
2 | + | ||
3 | +use strict; | ||
4 | +use warnings; | ||
5 | +use IPC::Open2; | ||
6 | + | ||
7 | +# An example hook script to integrate Watchman | ||
8 | +# (https://facebook.github.io/watchman/) with git to speed up detecting | ||
9 | +# new and modified files. | ||
10 | +# | ||
11 | +# The hook is passed a version (currently 1) and a time in nanoseconds | ||
12 | +# formatted as a string and outputs to stdout all files that have been | ||
13 | +# modified since the given time. Paths must be relative to the root of | ||
14 | +# the working tree and separated by a single NUL. | ||
15 | +# | ||
16 | +# To enable this hook, rename this file to "query-watchman" and set | ||
17 | +# 'git config core.fsmonitor .git/hooks/query-watchman' | ||
18 | +# | ||
19 | +my ($version, $time) = @ARGV; | ||
20 | + | ||
21 | +# Check the hook interface version | ||
22 | + | ||
23 | +if ($version == 1) { | ||
24 | + # convert nanoseconds to seconds | ||
25 | + $time = int $time / 1000000000; | ||
26 | +} else { | ||
27 | + die "Unsupported query-fsmonitor hook version '$version'.\n" . | ||
28 | + "Falling back to scanning...\n"; | ||
29 | +} | ||
30 | + | ||
31 | +my $git_work_tree; | ||
32 | +if ($^O =~ 'msys' || $^O =~ 'cygwin') { | ||
33 | + $git_work_tree = Win32::GetCwd(); | ||
34 | + $git_work_tree =~ tr/\\/\//; | ||
35 | +} else { | ||
36 | + require Cwd; | ||
37 | + $git_work_tree = Cwd::cwd(); | ||
38 | +} | ||
39 | + | ||
40 | +my $retry = 1; | ||
41 | + | ||
42 | +launch_watchman(); | ||
43 | + | ||
44 | +sub launch_watchman { | ||
45 | + | ||
46 | + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') | ||
47 | + or die "open2() failed: $!\n" . | ||
48 | + "Falling back to scanning...\n"; | ||
49 | + | ||
50 | + # In the query expression below we're asking for names of files that | ||
51 | + # changed since $time but were not transient (ie created after | ||
52 | + # $time but no longer exist). | ||
53 | + # | ||
54 | + # To accomplish this, we're using the "since" generator to use the | ||
55 | + # recency index to select candidate nodes and "fields" to limit the | ||
56 | + # output to file names only. Then we're using the "expression" term to | ||
57 | + # further constrain the results. | ||
58 | + # | ||
59 | + # The category of transient files that we want to ignore will have a | ||
60 | + # creation clock (cclock) newer than $time_t value and will also not | ||
61 | + # currently exist. | ||
62 | + | ||
63 | + my $query = <<" END"; | ||
64 | + ["query", "$git_work_tree", { | ||
65 | + "since": $time, | ||
66 | + "fields": ["name"], | ||
67 | + "expression": ["not", ["allof", ["since", $time, "cclock"], ["not", "exists"]]] | ||
68 | + }] | ||
69 | + END | ||
70 | + | ||
71 | + print CHLD_IN $query; | ||
72 | + close CHLD_IN; | ||
73 | + my $response = do {local $/; <CHLD_OUT>}; | ||
74 | + | ||
75 | + die "Watchman: command returned no output.\n" . | ||
76 | + "Falling back to scanning...\n" if $response eq ""; | ||
77 | + die "Watchman: command returned invalid output: $response\n" . | ||
78 | + "Falling back to scanning...\n" unless $response =~ /^\{/; | ||
79 | + | ||
80 | + my $json_pkg; | ||
81 | + eval { | ||
82 | + require JSON::XS; | ||
83 | + $json_pkg = "JSON::XS"; | ||
84 | + 1; | ||
85 | + } or do { | ||
86 | + require JSON::PP; | ||
87 | + $json_pkg = "JSON::PP"; | ||
88 | + }; | ||
89 | + | ||
90 | + my $o = $json_pkg->new->utf8->decode($response); | ||
91 | + | ||
92 | + if ($retry > 0 and $o->{error} and $o->{error} =~ m/unable to resolve root .* directory (.*) is not watched/) { | ||
93 | + print STDERR "Adding '$git_work_tree' to watchman's watch list.\n"; | ||
94 | + $retry--; | ||
95 | + qx/watchman watch "$git_work_tree"/; | ||
96 | + die "Failed to make watchman watch '$git_work_tree'.\n" . | ||
97 | + "Falling back to scanning...\n" if $? != 0; | ||
98 | + | ||
99 | + # Watchman will always return all files on the first query so | ||
100 | + # return the fast "everything is dirty" flag to git and do the | ||
101 | + # Watchman query just to get it over with now so we won't pay | ||
102 | + # the cost in git to look up each individual file. | ||
103 | + print "/\0"; | ||
104 | + eval { launch_watchman() }; | ||
105 | + exit 0; | ||
106 | + } | ||
107 | + | ||
108 | + die "Watchman: $o->{error}.\n" . | ||
109 | + "Falling back to scanning...\n" if $o->{error}; | ||
110 | + | ||
111 | + binmode STDOUT, ":utf8"; | ||
112 | + local $, = "\0"; | ||
113 | + print @{$o->{files}}; | ||
114 | +} |
hooks/post-update.sample
0 → 100644
hooks/pre-applypatch.sample
0 → 100644
1 | +#!/bin/sh | ||
2 | +# | ||
3 | +# An example hook script to verify what is about to be committed | ||
4 | +# by applypatch from an e-mail message. | ||
5 | +# | ||
6 | +# The hook should exit with non-zero status after issuing an | ||
7 | +# appropriate message if it wants to stop the commit. | ||
8 | +# | ||
9 | +# To enable this hook, rename this file to "pre-applypatch". | ||
10 | + | ||
11 | +. git-sh-setup | ||
12 | +precommit="$(git rev-parse --git-path hooks/pre-commit)" | ||
13 | +test -x "$precommit" && exec "$precommit" ${1+"$@"} | ||
14 | +: |
hooks/pre-commit.sample
0 → 100644
1 | +#!/bin/sh | ||
2 | +# | ||
3 | +# An example hook script to verify what is about to be committed. | ||
4 | +# Called by "git commit" with no arguments. The hook should | ||
5 | +# exit with non-zero status after issuing an appropriate message if | ||
6 | +# it wants to stop the commit. | ||
7 | +# | ||
8 | +# To enable this hook, rename this file to "pre-commit". | ||
9 | + | ||
10 | +if git rev-parse --verify HEAD >/dev/null 2>&1 | ||
11 | +then | ||
12 | + against=HEAD | ||
13 | +else | ||
14 | + # Initial commit: diff against an empty tree object | ||
15 | + against=$(git hash-object -t tree /dev/null) | ||
16 | +fi | ||
17 | + | ||
18 | +# If you want to allow non-ASCII filenames set this variable to true. | ||
19 | +allownonascii=$(git config --bool hooks.allownonascii) | ||
20 | + | ||
21 | +# Redirect output to stderr. | ||
22 | +exec 1>&2 | ||
23 | + | ||
24 | +# Cross platform projects tend to avoid non-ASCII filenames; prevent | ||
25 | +# them from being added to the repository. We exploit the fact that the | ||
26 | +# printable range starts at the space character and ends with tilde. | ||
27 | +if [ "$allownonascii" != "true" ] && | ||
28 | + # Note that the use of brackets around a tr range is ok here, (it's | ||
29 | + # even required, for portability to Solaris 10's /usr/bin/tr), since | ||
30 | + # the square bracket bytes happen to fall in the designated range. | ||
31 | + test $(git diff --cached --name-only --diff-filter=A -z $against | | ||
32 | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 | ||
33 | +then | ||
34 | + cat <<\EOF | ||
35 | +Error: Attempt to add a non-ASCII file name. | ||
36 | + | ||
37 | +This can cause problems if you want to work with people on other platforms. | ||
38 | + | ||
39 | +To be portable it is advisable to rename the file. | ||
40 | + | ||
41 | +If you know what you are doing you can disable this check using: | ||
42 | + | ||
43 | + git config hooks.allownonascii true | ||
44 | +EOF | ||
45 | + exit 1 | ||
46 | +fi | ||
47 | + | ||
48 | +# If there are whitespace errors, print the offending file names and fail. | ||
49 | +exec git diff-index --check --cached $against -- |
hooks/pre-push.sample
0 → 100644
1 | +#!/bin/sh | ||
2 | + | ||
3 | +# An example hook script to verify what is about to be pushed. Called by "git | ||
4 | +# push" after it has checked the remote status, but before anything has been | ||
5 | +# pushed. If this script exits with a non-zero status nothing will be pushed. | ||
6 | +# | ||
7 | +# This hook is called with the following parameters: | ||
8 | +# | ||
9 | +# $1 -- Name of the remote to which the push is being done | ||
10 | +# $2 -- URL to which the push is being done | ||
11 | +# | ||
12 | +# If pushing without using a named remote those arguments will be equal. | ||
13 | +# | ||
14 | +# Information about the commits which are being pushed is supplied as lines to | ||
15 | +# the standard input in the form: | ||
16 | +# | ||
17 | +# <local ref> <local sha1> <remote ref> <remote sha1> | ||
18 | +# | ||
19 | +# This sample shows how to prevent push of commits where the log message starts | ||
20 | +# with "WIP" (work in progress). | ||
21 | + | ||
22 | +remote="$1" | ||
23 | +url="$2" | ||
24 | + | ||
25 | +z40=0000000000000000000000000000000000000000 | ||
26 | + | ||
27 | +while read local_ref local_sha remote_ref remote_sha | ||
28 | +do | ||
29 | + if [ "$local_sha" = $z40 ] | ||
30 | + then | ||
31 | + # Handle delete | ||
32 | + : | ||
33 | + else | ||
34 | + if [ "$remote_sha" = $z40 ] | ||
35 | + then | ||
36 | + # New branch, examine all commits | ||
37 | + range="$local_sha" | ||
38 | + else | ||
39 | + # Update to existing branch, examine new commits | ||
40 | + range="$remote_sha..$local_sha" | ||
41 | + fi | ||
42 | + | ||
43 | + # Check for WIP commit | ||
44 | + commit=`git rev-list -n 1 --grep '^WIP' "$range"` | ||
45 | + if [ -n "$commit" ] | ||
46 | + then | ||
47 | + echo >&2 "Found WIP commit in $local_ref, not pushing" | ||
48 | + exit 1 | ||
49 | + fi | ||
50 | + fi | ||
51 | +done | ||
52 | + | ||
53 | +exit 0 |
hooks/pre-rebase.sample
0 → 100644
1 | +#!/bin/sh | ||
2 | +# | ||
3 | +# Copyright (c) 2006, 2008 Junio C Hamano | ||
4 | +# | ||
5 | +# The "pre-rebase" hook is run just before "git rebase" starts doing | ||
6 | +# its job, and can prevent the command from running by exiting with | ||
7 | +# non-zero status. | ||
8 | +# | ||
9 | +# The hook is called with the following parameters: | ||
10 | +# | ||
11 | +# $1 -- the upstream the series was forked from. | ||
12 | +# $2 -- the branch being rebased (or empty when rebasing the current branch). | ||
13 | +# | ||
14 | +# This sample shows how to prevent topic branches that are already | ||
15 | +# merged to 'next' branch from getting rebased, because allowing it | ||
16 | +# would result in rebasing already published history. | ||
17 | + | ||
18 | +publish=next | ||
19 | +basebranch="$1" | ||
20 | +if test "$#" = 2 | ||
21 | +then | ||
22 | + topic="refs/heads/$2" | ||
23 | +else | ||
24 | + topic=`git symbolic-ref HEAD` || | ||
25 | + exit 0 ;# we do not interrupt rebasing detached HEAD | ||
26 | +fi | ||
27 | + | ||
28 | +case "$topic" in | ||
29 | +refs/heads/??/*) | ||
30 | + ;; | ||
31 | +*) | ||
32 | + exit 0 ;# we do not interrupt others. | ||
33 | + ;; | ||
34 | +esac | ||
35 | + | ||
36 | +# Now we are dealing with a topic branch being rebased | ||
37 | +# on top of master. Is it OK to rebase it? | ||
38 | + | ||
39 | +# Does the topic really exist? | ||
40 | +git show-ref -q "$topic" || { | ||
41 | + echo >&2 "No such branch $topic" | ||
42 | + exit 1 | ||
43 | +} | ||
44 | + | ||
45 | +# Is topic fully merged to master? | ||
46 | +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` | ||
47 | +if test -z "$not_in_master" | ||
48 | +then | ||
49 | + echo >&2 "$topic is fully merged to master; better remove it." | ||
50 | + exit 1 ;# we could allow it, but there is no point. | ||
51 | +fi | ||
52 | + | ||
53 | +# Is topic ever merged to next? If so you should not be rebasing it. | ||
54 | +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` | ||
55 | +only_next_2=`git rev-list ^master ${publish} | sort` | ||
56 | +if test "$only_next_1" = "$only_next_2" | ||
57 | +then | ||
58 | + not_in_topic=`git rev-list "^$topic" master` | ||
59 | + if test -z "$not_in_topic" | ||
60 | + then | ||
61 | + echo >&2 "$topic is already up to date with master" | ||
62 | + exit 1 ;# we could allow it, but there is no point. | ||
63 | + else | ||
64 | + exit 0 | ||
65 | + fi | ||
66 | +else | ||
67 | + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` | ||
68 | + /usr/bin/perl -e ' | ||
69 | + my $topic = $ARGV[0]; | ||
70 | + my $msg = "* $topic has commits already merged to public branch:\n"; | ||
71 | + my (%not_in_next) = map { | ||
72 | + /^([0-9a-f]+) /; | ||
73 | + ($1 => 1); | ||
74 | + } split(/\n/, $ARGV[1]); | ||
75 | + for my $elem (map { | ||
76 | + /^([0-9a-f]+) (.*)$/; | ||
77 | + [$1 => $2]; | ||
78 | + } split(/\n/, $ARGV[2])) { | ||
79 | + if (!exists $not_in_next{$elem->[0]}) { | ||
80 | + if ($msg) { | ||
81 | + print STDERR $msg; | ||
82 | + undef $msg; | ||
83 | + } | ||
84 | + print STDERR " $elem->[1]\n"; | ||
85 | + } | ||
86 | + } | ||
87 | + ' "$topic" "$not_in_next" "$not_in_master" | ||
88 | + exit 1 | ||
89 | +fi | ||
90 | + | ||
91 | +<<\DOC_END | ||
92 | + | ||
93 | +This sample hook safeguards topic branches that have been | ||
94 | +published from being rewound. | ||
95 | + | ||
96 | +The workflow assumed here is: | ||
97 | + | ||
98 | + * Once a topic branch forks from "master", "master" is never | ||
99 | + merged into it again (either directly or indirectly). | ||
100 | + | ||
101 | + * Once a topic branch is fully cooked and merged into "master", | ||
102 | + it is deleted. If you need to build on top of it to correct | ||
103 | + earlier mistakes, a new topic branch is created by forking at | ||
104 | + the tip of the "master". This is not strictly necessary, but | ||
105 | + it makes it easier to keep your history simple. | ||
106 | + | ||
107 | + * Whenever you need to test or publish your changes to topic | ||
108 | + branches, merge them into "next" branch. | ||
109 | + | ||
110 | +The script, being an example, hardcodes the publish branch name | ||
111 | +to be "next", but it is trivial to make it configurable via | ||
112 | +$GIT_DIR/config mechanism. | ||
113 | + | ||
114 | +With this workflow, you would want to know: | ||
115 | + | ||
116 | +(1) ... if a topic branch has ever been merged to "next". Young | ||
117 | + topic branches can have stupid mistakes you would rather | ||
118 | + clean up before publishing, and things that have not been | ||
119 | + merged into other branches can be easily rebased without | ||
120 | + affecting other people. But once it is published, you would | ||
121 | + not want to rewind it. | ||
122 | + | ||
123 | +(2) ... if a topic branch has been fully merged to "master". | ||
124 | + Then you can delete it. More importantly, you should not | ||
125 | + build on top of it -- other people may already want to | ||
126 | + change things related to the topic as patches against your | ||
127 | + "master", so if you need further changes, it is better to | ||
128 | + fork the topic (perhaps with the same name) afresh from the | ||
129 | + tip of "master". | ||
130 | + | ||
131 | +Let's look at this example: | ||
132 | + | ||
133 | + o---o---o---o---o---o---o---o---o---o "next" | ||
134 | + / / / / | ||
135 | + / a---a---b A / / | ||
136 | + / / / / | ||
137 | + / / c---c---c---c B / | ||
138 | + / / / \ / | ||
139 | + / / / b---b C \ / | ||
140 | + / / / / \ / | ||
141 | + ---o---o---o---o---o---o---o---o---o---o---o "master" | ||
142 | + | ||
143 | + | ||
144 | +A, B and C are topic branches. | ||
145 | + | ||
146 | + * A has one fix since it was merged up to "next". | ||
147 | + | ||
148 | + * B has finished. It has been fully merged up to "master" and "next", | ||
149 | + and is ready to be deleted. | ||
150 | + | ||
151 | + * C has not merged to "next" at all. | ||
152 | + | ||
153 | +We would want to allow C to be rebased, refuse A, and encourage | ||
154 | +B to be deleted. | ||
155 | + | ||
156 | +To compute (1): | ||
157 | + | ||
158 | + git rev-list ^master ^topic next | ||
159 | + git rev-list ^master next | ||
160 | + | ||
161 | + if these match, topic has not merged in next at all. | ||
162 | + | ||
163 | +To compute (2): | ||
164 | + | ||
165 | + git rev-list master..topic | ||
166 | + | ||
167 | + if this is empty, it is fully merged to "master". | ||
168 | + | ||
169 | +DOC_END |
hooks/pre-receive.sample
0 → 100644
1 | +#!/bin/sh | ||
2 | +# | ||
3 | +# An example hook script to make use of push options. | ||
4 | +# The example simply echoes all push options that start with 'echoback=' | ||
5 | +# and rejects all pushes when the "reject" push option is used. | ||
6 | +# | ||
7 | +# To enable this hook, rename this file to "pre-receive". | ||
8 | + | ||
9 | +if test -n "$GIT_PUSH_OPTION_COUNT" | ||
10 | +then | ||
11 | + i=0 | ||
12 | + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" | ||
13 | + do | ||
14 | + eval "value=\$GIT_PUSH_OPTION_$i" | ||
15 | + case "$value" in | ||
16 | + echoback=*) | ||
17 | + echo "echo from the pre-receive-hook: ${value#*=}" >&2 | ||
18 | + ;; | ||
19 | + reject) | ||
20 | + exit 1 | ||
21 | + esac | ||
22 | + i=$((i + 1)) | ||
23 | + done | ||
24 | +fi |
hooks/prepare-commit-msg.sample
0 → 100644
1 | +#!/bin/sh | ||
2 | +# | ||
3 | +# An example hook script to prepare the commit log message. | ||
4 | +# Called by "git commit" with the name of the file that has the | ||
5 | +# commit message, followed by the description of the commit | ||
6 | +# message's source. The hook's purpose is to edit the commit | ||
7 | +# message file. If the hook fails with a non-zero status, | ||
8 | +# the commit is aborted. | ||
9 | +# | ||
10 | +# To enable this hook, rename this file to "prepare-commit-msg". | ||
11 | + | ||
12 | +# This hook includes three examples. The first one removes the | ||
13 | +# "# Please enter the commit message..." help message. | ||
14 | +# | ||
15 | +# The second includes the output of "git diff --name-status -r" | ||
16 | +# into the message, just before the "git status" output. It is | ||
17 | +# commented because it doesn't cope with --amend or with squashed | ||
18 | +# commits. | ||
19 | +# | ||
20 | +# The third example adds a Signed-off-by line to the message, that can | ||
21 | +# still be edited. This is rarely a good idea. | ||
22 | + | ||
23 | +COMMIT_MSG_FILE=$1 | ||
24 | +COMMIT_SOURCE=$2 | ||
25 | +SHA1=$3 | ||
26 | + | ||
27 | +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" | ||
28 | + | ||
29 | +# case "$COMMIT_SOURCE,$SHA1" in | ||
30 | +# ,|template,) | ||
31 | +# /usr/bin/perl -i.bak -pe ' | ||
32 | +# print "\n" . `git diff --cached --name-status -r` | ||
33 | +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; | ||
34 | +# *) ;; | ||
35 | +# esac | ||
36 | + | ||
37 | +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') | ||
38 | +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" | ||
39 | +# if test -z "$COMMIT_SOURCE" | ||
40 | +# then | ||
41 | +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" | ||
42 | +# fi |
hooks/update.sample
0 → 100644
1 | +#!/bin/sh | ||
2 | +# | ||
3 | +# An example hook script to block unannotated tags from entering. | ||
4 | +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new | ||
5 | +# | ||
6 | +# To enable this hook, rename this file to "update". | ||
7 | +# | ||
8 | +# Config | ||
9 | +# ------ | ||
10 | +# hooks.allowunannotated | ||
11 | +# This boolean sets whether unannotated tags will be allowed into the | ||
12 | +# repository. By default they won't be. | ||
13 | +# hooks.allowdeletetag | ||
14 | +# This boolean sets whether deleting tags will be allowed in the | ||
15 | +# repository. By default they won't be. | ||
16 | +# hooks.allowmodifytag | ||
17 | +# This boolean sets whether a tag may be modified after creation. By default | ||
18 | +# it won't be. | ||
19 | +# hooks.allowdeletebranch | ||
20 | +# This boolean sets whether deleting branches will be allowed in the | ||
21 | +# repository. By default they won't be. | ||
22 | +# hooks.denycreatebranch | ||
23 | +# This boolean sets whether remotely creating branches will be denied | ||
24 | +# in the repository. By default this is allowed. | ||
25 | +# | ||
26 | + | ||
27 | +# --- Command line | ||
28 | +refname="$1" | ||
29 | +oldrev="$2" | ||
30 | +newrev="$3" | ||
31 | + | ||
32 | +# --- Safety check | ||
33 | +if [ -z "$GIT_DIR" ]; then | ||
34 | + echo "Don't run this script from the command line." >&2 | ||
35 | + echo " (if you want, you could supply GIT_DIR then run" >&2 | ||
36 | + echo " $0 <ref> <oldrev> <newrev>)" >&2 | ||
37 | + exit 1 | ||
38 | +fi | ||
39 | + | ||
40 | +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then | ||
41 | + echo "usage: $0 <ref> <oldrev> <newrev>" >&2 | ||
42 | + exit 1 | ||
43 | +fi | ||
44 | + | ||
45 | +# --- Config | ||
46 | +allowunannotated=$(git config --bool hooks.allowunannotated) | ||
47 | +allowdeletebranch=$(git config --bool hooks.allowdeletebranch) | ||
48 | +denycreatebranch=$(git config --bool hooks.denycreatebranch) | ||
49 | +allowdeletetag=$(git config --bool hooks.allowdeletetag) | ||
50 | +allowmodifytag=$(git config --bool hooks.allowmodifytag) | ||
51 | + | ||
52 | +# check for no description | ||
53 | +projectdesc=$(sed -e '1q' "$GIT_DIR/description") | ||
54 | +case "$projectdesc" in | ||
55 | +"Unnamed repository"* | "") | ||
56 | + echo "*** Project description file hasn't been set" >&2 | ||
57 | + exit 1 | ||
58 | + ;; | ||
59 | +esac | ||
60 | + | ||
61 | +# --- Check types | ||
62 | +# if $newrev is 0000...0000, it's a commit to delete a ref. | ||
63 | +zero="0000000000000000000000000000000000000000" | ||
64 | +if [ "$newrev" = "$zero" ]; then | ||
65 | + newrev_type=delete | ||
66 | +else | ||
67 | + newrev_type=$(git cat-file -t $newrev) | ||
68 | +fi | ||
69 | + | ||
70 | +case "$refname","$newrev_type" in | ||
71 | + refs/tags/*,commit) | ||
72 | + # un-annotated tag | ||
73 | + short_refname=${refname##refs/tags/} | ||
74 | + if [ "$allowunannotated" != "true" ]; then | ||
75 | + echo "*** The un-annotated tag, $short_refname, is not allowed in this repository" >&2 | ||
76 | + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 | ||
77 | + exit 1 | ||
78 | + fi | ||
79 | + ;; | ||
80 | + refs/tags/*,delete) | ||
81 | + # delete tag | ||
82 | + if [ "$allowdeletetag" != "true" ]; then | ||
83 | + echo "*** Deleting a tag is not allowed in this repository" >&2 | ||
84 | + exit 1 | ||
85 | + fi | ||
86 | + ;; | ||
87 | + refs/tags/*,tag) | ||
88 | + # annotated tag | ||
89 | + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 | ||
90 | + then | ||
91 | + echo "*** Tag '$refname' already exists." >&2 | ||
92 | + echo "*** Modifying a tag is not allowed in this repository." >&2 | ||
93 | + exit 1 | ||
94 | + fi | ||
95 | + ;; | ||
96 | + refs/heads/*,commit) | ||
97 | + # branch | ||
98 | + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then | ||
99 | + echo "*** Creating a branch is not allowed in this repository" >&2 | ||
100 | + exit 1 | ||
101 | + fi | ||
102 | + ;; | ||
103 | + refs/heads/*,delete) | ||
104 | + # delete branch | ||
105 | + if [ "$allowdeletebranch" != "true" ]; then | ||
106 | + echo "*** Deleting a branch is not allowed in this repository" >&2 | ||
107 | + exit 1 | ||
108 | + fi | ||
109 | + ;; | ||
110 | + refs/remotes/*,commit) | ||
111 | + # tracking branch | ||
112 | + ;; | ||
113 | + refs/remotes/*,delete) | ||
114 | + # delete tracking branch | ||
115 | + if [ "$allowdeletebranch" != "true" ]; then | ||
116 | + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 | ||
117 | + exit 1 | ||
118 | + fi | ||
119 | + ;; | ||
120 | + *) | ||
121 | + # Anything else (is there anything else?) | ||
122 | + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 | ||
123 | + exit 1 | ||
124 | + ;; | ||
125 | +esac | ||
126 | + | ||
127 | +# --- Finished | ||
128 | +exit 0 |
index
0 → 100644
不能预览此文件类型
info/exclude
0 → 100644
logs/HEAD
0 → 100644
1 | +0000000000000000000000000000000000000000 a5bf1a6ce31cbb3fbe07b9700e1fa1c0651de4bd 张侠英 <zxy@bronet.cn> 1589768019 +0800 initial pull |
logs/refs/heads/master
0 → 100644
1 | +0000000000000000000000000000000000000000 a5bf1a6ce31cbb3fbe07b9700e1fa1c0651de4bd 张侠英 <zxy@bronet.cn> 1589768019 +0800 initial pull |
logs/refs/remotes/origin/Dev
0 → 100644
1 | +0000000000000000000000000000000000000000 a5bf1a6ce31cbb3fbe07b9700e1fa1c0651de4bd 张侠英 <zxy@bronet.cn> 1589847822 +0800 fetch: storing head |
logs/refs/remotes/origin/master
0 → 100644
1 | +0000000000000000000000000000000000000000 a5bf1a6ce31cbb3fbe07b9700e1fa1c0651de4bd 张侠英 <zxy@bronet.cn> 1589768019 +0800 pull: storing head |
不能预览此文件类型
不能预览此文件类型
不能预览此文件类型
refs/heads/master
0 → 100644
1 | +a5bf1a6ce31cbb3fbe07b9700e1fa1c0651de4bd |
refs/remotes/origin/Dev
0 → 100644
1 | +a5bf1a6ce31cbb3fbe07b9700e1fa1c0651de4bd |
refs/remotes/origin/master
0 → 100644
1 | +a5bf1a6ce31cbb3fbe07b9700e1fa1c0651de4bd |
-
请 注册 或 登录 后发表评论