зеркало из https://github.com/microsoft/git.git
Merge branch 'jh/checkout-auto-tracking'
Fix a minor regression in v1.8.3.2 and later that made it
impossible to base your local work on anything but a local branch
of the upstream repository you are tracking from.
* jh/checkout-auto-tracking:
t3200: fix failure on case-insensitive filesystems
branch.c: Relax unnecessary requirement on upstream's remote ref name
t3200: Add test demonstrating minor regression in 41c21f2
Refer to branch.<name>.remote/merge when documenting --track
t3200: Minor fix when preparing for tracking failure
t2024: Fix &&-chaining and a couple of typos
This commit is contained in:
Коммит
b05fc49adc
|
@ -48,7 +48,8 @@ working tree to it; use "git checkout <newbranch>" to switch to the
|
||||||
new branch.
|
new branch.
|
||||||
|
|
||||||
When a local branch is started off a remote-tracking branch, Git sets up the
|
When a local branch is started off a remote-tracking branch, Git sets up the
|
||||||
branch so that 'git pull' will appropriately merge from
|
branch (specifically the `branch.<name>.remote` and `branch.<name>.merge`
|
||||||
|
configuration entries) so that 'git pull' will appropriately merge from
|
||||||
the remote-tracking branch. This behavior may be changed via the global
|
the remote-tracking branch. This behavior may be changed via the global
|
||||||
`branch.autosetupmerge` configuration flag. That setting can be
|
`branch.autosetupmerge` configuration flag. That setting can be
|
||||||
overridden by using the `--track` and `--no-track` options, and
|
overridden by using the `--track` and `--no-track` options, and
|
||||||
|
@ -156,7 +157,8 @@ This option is only applicable in non-verbose mode.
|
||||||
|
|
||||||
-t::
|
-t::
|
||||||
--track::
|
--track::
|
||||||
When creating a new branch, set up configuration to mark the
|
When creating a new branch, set up `branch.<name>.remote` and
|
||||||
|
`branch.<name>.merge` configuration entries to mark the
|
||||||
start-point branch as "upstream" from the new branch. This
|
start-point branch as "upstream" from the new branch. This
|
||||||
configuration will tell git to show the relationship between the
|
configuration will tell git to show the relationship between the
|
||||||
two branches in `git status` and `git branch -v`. Furthermore,
|
two branches in `git status` and `git branch -v`. Furthermore,
|
||||||
|
|
3
branch.c
3
branch.c
|
@ -203,8 +203,7 @@ static int check_tracking_branch(struct remote *remote, void *cb_data)
|
||||||
struct refspec query;
|
struct refspec query;
|
||||||
memset(&query, 0, sizeof(struct refspec));
|
memset(&query, 0, sizeof(struct refspec));
|
||||||
query.dst = tracking_branch;
|
query.dst = tracking_branch;
|
||||||
return !(remote_find_tracking(remote, &query) ||
|
return !remote_find_tracking(remote, &query);
|
||||||
prefixcmp(query.src, "refs/heads/"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int validate_remote_tracking_branch(char *ref)
|
static int validate_remote_tracking_branch(char *ref)
|
||||||
|
|
|
@ -104,7 +104,7 @@ test_expect_success 'setup more remotes with unconventional refspecs' '
|
||||||
cd repo_c &&
|
cd repo_c &&
|
||||||
test_commit c_master &&
|
test_commit c_master &&
|
||||||
git checkout -b bar &&
|
git checkout -b bar &&
|
||||||
test_commit c_bar
|
test_commit c_bar &&
|
||||||
git checkout -b spam &&
|
git checkout -b spam &&
|
||||||
test_commit c_spam
|
test_commit c_spam
|
||||||
) &&
|
) &&
|
||||||
|
@ -113,9 +113,9 @@ test_expect_success 'setup more remotes with unconventional refspecs' '
|
||||||
cd repo_d &&
|
cd repo_d &&
|
||||||
test_commit d_master &&
|
test_commit d_master &&
|
||||||
git checkout -b baz &&
|
git checkout -b baz &&
|
||||||
test_commit f_baz
|
test_commit d_baz &&
|
||||||
git checkout -b eggs &&
|
git checkout -b eggs &&
|
||||||
test_commit c_eggs
|
test_commit d_eggs
|
||||||
) &&
|
) &&
|
||||||
git remote add repo_c repo_c &&
|
git remote add repo_c repo_c &&
|
||||||
git config remote.repo_c.fetch \
|
git config remote.repo_c.fetch \
|
||||||
|
|
|
@ -320,8 +320,9 @@ test_expect_success 'test tracking setup (non-wildcard, matching)' '
|
||||||
|
|
||||||
test_expect_success 'tracking setup fails on non-matching refspec' '
|
test_expect_success 'tracking setup fails on non-matching refspec' '
|
||||||
git config remote.local.url . &&
|
git config remote.local.url . &&
|
||||||
git config remote.local.fetch refs/heads/s:refs/remotes/local/s &&
|
git config remote.local.fetch refs/heads/*:refs/remotes/local/* &&
|
||||||
(git show-ref -q refs/remotes/local/master || git fetch local) &&
|
(git show-ref -q refs/remotes/local/master || git fetch local) &&
|
||||||
|
git config remote.local.fetch refs/heads/s:refs/remotes/local/s &&
|
||||||
test_must_fail git branch --track my5 local/master &&
|
test_must_fail git branch --track my5 local/master &&
|
||||||
test_must_fail git config branch.my5.remote &&
|
test_must_fail git config branch.my5.remote &&
|
||||||
test_must_fail git config branch.my5.merge
|
test_must_fail git config branch.my5.merge
|
||||||
|
@ -871,4 +872,39 @@ test_expect_success '--merged catches invalid object names' '
|
||||||
test_must_fail git branch --merged 0000000000000000000000000000000000000000
|
test_must_fail git branch --merged 0000000000000000000000000000000000000000
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'tracking with unexpected .fetch refspec' '
|
||||||
|
rm -rf a b c d &&
|
||||||
|
git init a &&
|
||||||
|
(
|
||||||
|
cd a &&
|
||||||
|
test_commit a
|
||||||
|
) &&
|
||||||
|
git init b &&
|
||||||
|
(
|
||||||
|
cd b &&
|
||||||
|
test_commit b
|
||||||
|
) &&
|
||||||
|
git init c &&
|
||||||
|
(
|
||||||
|
cd c &&
|
||||||
|
test_commit c &&
|
||||||
|
git remote add a ../a &&
|
||||||
|
git remote add b ../b &&
|
||||||
|
git fetch --all
|
||||||
|
) &&
|
||||||
|
git init d &&
|
||||||
|
(
|
||||||
|
cd d &&
|
||||||
|
git remote add c ../c &&
|
||||||
|
git config remote.c.fetch "+refs/remotes/*:refs/remotes/*" &&
|
||||||
|
git fetch c &&
|
||||||
|
git branch --track local/a/master remotes/a/master &&
|
||||||
|
test "$(git config branch.local/a/master.remote)" = "c" &&
|
||||||
|
test "$(git config branch.local/a/master.merge)" = "refs/remotes/a/master" &&
|
||||||
|
git rev-parse --verify a >expect &&
|
||||||
|
git rev-parse --verify local/a/master >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Загрузка…
Ссылка в новой задаче