diff --git a/lib/mix/lib/mix/scm/git.ex b/lib/mix/lib/mix/scm/git.ex index e59c6c29826..cb2c29f5c35 100644 --- a/lib/mix/lib/mix/scm/git.ex +++ b/lib/mix/lib/mix/scm/git.ex @@ -141,7 +141,7 @@ defmodule Mix.SCM.Git do # Migrate the Git repo rev = lock_rev || get_origin_opts_rev(opts) || default_branch() - git!(["--git-dir=.git", "checkout", "--quiet", rev]) + git!(["--git-dir=.git", "checkout", "--force", "--quiet", rev]) if opts[:submodules] do git!(~w[-c core.hooksPath='' --git-dir=.git submodule update --init --recursive]) diff --git a/lib/mix/test/mix/tasks/deps.git_test.exs b/lib/mix/test/mix/tasks/deps.git_test.exs index 42559acb7cc..c2e97ffc4f4 100644 --- a/lib/mix/test/mix/tasks/deps.git_test.exs +++ b/lib/mix/test/mix/tasks/deps.git_test.exs @@ -400,9 +400,14 @@ defmodule Mix.Tasks.DepsGitTest do Mix.State.clear_cache() purge([DepsOnGitRepo.MixProject]) + # Write to the checkout location to ensure it is replaced + File.mkdir_p!("deps/deps_on_git_repo/lib") + File.write!("deps/deps_on_git_repo/lib/deps_on_git_repo.ex", "# WILL BE OVERRIDDEN") + Mix.Tasks.Deps.Update.run(["deps_on_git_repo"]) assert File.exists?("deps/git_repo/lib/git_repo.ex") assert File.read!("mix.lock") =~ last + assert File.read!("deps/deps_on_git_repo/lib/deps_on_git_repo.ex") =~ "GitRepo.hello()" refute File.exists?("_build/dev/lib/git_repo/.mix/compile.fetch") end) after @@ -427,10 +432,15 @@ defmodule Mix.Tasks.DepsGitTest do Mix.State.clear_cache() purge([DepsOnGitRepo.MixProject]) + # Write to the checkout location to ensure it is replaced + File.mkdir_p!("deps/deps_on_git_repo/lib") + File.write!("deps/deps_on_git_repo/lib/deps_on_git_repo.ex", "# WILL BE OVERRIDDEN") + Mix.Dep.Lock.write(%{deps_on_git_repo: {:git, fixture_path("deps_on_git_repo"), last, []}}) Mix.Tasks.Deps.Get.run([]) assert File.exists?("deps/git_repo/lib/git_repo.ex") assert File.read!("mix.lock") =~ last + assert File.read!("deps/deps_on_git_repo/lib/deps_on_git_repo.ex") =~ "GitRepo.hello()" refute File.exists?("_build/dev/lib/git_repo/.mix/compile.fetch") end) after