“Git fat: ref HEAD không phải là một ref tượng trưng” khi sử dụng plugin phát hành maven


104

Tôi nhận được đầu ra lỗi sau khi chạy bước chuẩn bị plugin phát hành Maven, tức là mvn release:prepare --batch-mode -DreleaseVersion=1.1.2 -DdevelopmentVersion=1.2.0-SNAPSHOT -Dtag=v1.1.2 -Xtừ gói Atlassian Bamboo. Tuy nhiên, làm tương tự trong dòng lệnh hoạt động tốt. Ngăn xếp lỗi đầy đủ ở bên dưới.

Bất kỳ ý tưởng làm thế nào điều này có thể được giải quyết?

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.4.2:prepare (default-cli) on project hpcmom: An error is occurred in the checkin process: Exception while executing SCM command. Detecting the current branch failed: fatal: ref HEAD is not a symbolic ref -> [Help 1]
    org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-release-plugin:2.4.2:prepare (default-cli) on project hpcmom: An error is occurred in the checkin process: Exception while executing SCM command.
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.MojoExecutionException: An error is occurred in the checkin process: Exception while executing SCM command.
    at org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:281)
    at org.apache.maven.plugins.release.PrepareReleaseMojo.execute(PrepareReleaseMojo.java:232)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
    ... 19 more
Caused by: org.apache.maven.shared.release.ReleaseExecutionException: An error is occurred in the checkin process: Exception while executing SCM command.
    at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.checkin(AbstractScmCommitPhase.java:160)
    at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.performCheckins(AbstractScmCommitPhase.java:145)
    at org.apache.maven.shared.release.phase.ScmCommitPreparationPhase.runLogic(ScmCommitPreparationPhase.java:76)
    at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.execute(AbstractScmCommitPhase.java:78)
    at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:234)
    at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:169)
    at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:146)
    at org.apache.maven.shared.release.DefaultReleaseManager.prepare(DefaultReleaseManager.java:107)
    at org.apache.maven.plugins.release.PrepareReleaseMojo.prepareRelease(PrepareReleaseMojo.java:277)
    ... 22 more
Caused by: org.apache.maven.scm.ScmException: Exception while executing SCM command.
    at org.apache.maven.scm.command.AbstractCommand.execute(AbstractCommand.java:63)
    at org.apache.maven.scm.provider.git.AbstractGitScmProvider.executeCommand(AbstractGitScmProvider.java:291)
    at org.apache.maven.scm.provider.git.AbstractGitScmProvider.checkin(AbstractGitScmProvider.java:217)
    at org.apache.maven.scm.provider.AbstractScmProvider.checkIn(AbstractScmProvider.java:410)
    at org.apache.maven.shared.release.phase.AbstractScmCommitPhase.checkin(AbstractScmCommitPhase.java:156)
    ... 30 more
Caused by: org.apache.maven.scm.ScmException: Detecting the current branch failed: fatal: ref HEAD is not a symbolic ref

    at org.apache.maven.scm.provider.git.gitexe.command.branch.GitBranchCommand.getCurrentBranch(GitBranchCommand.java:147)
    at org.apache.maven.scm.provider.git.gitexe.command.checkin.GitCheckInCommand.createPushCommandLine(GitCheckInCommand.java:192)
    at org.apache.maven.scm.provider.git.gitexe.command.checkin.GitCheckInCommand.executeCheckInCommand(GitCheckInCommand.java:132)
    at org.apache.maven.scm.command.checkin.AbstractCheckInCommand.executeCommand(AbstractCheckInCommand.java:54)
    at org.apache.maven.scm.command.AbstractCommand.execute(AbstractCommand.java:59)
    ... 34 more
[ERROR] 
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
simple  02-Dec-2013 17:18:09    Failing task since return code of [/opt/dev/apache-maven/3.0.5//bin/mvn -Djava.io.tmpdir=/opt/atlassian/bamboo/5.2.1/temp/HPCMOM-RELEASE-JOB1 release:prepare --batch-mode -DignoreSnapshots=false -DreleaseVersion=1.1.2 -DdevelopmentVersion=1.2.0-SNAPSHOT -Dtag=v1.1.2 -X] was 1 while expected 0

CẬP NHẬT:

Làm git ls-remote .trên bản sao không gian làm việc cục bộ tạo ra:

azg@olympus:~/code/hpcmom$ git ls-remote .
7894eea08a0afecb99515d1339623be63a7539d4    HEAD
7894eea08a0afecb99515d1339623be63a7539d4    refs/heads/master
7894eea08a0afecb99515d1339623be63a7539d4    refs/remotes/origin/HEAD
7894eea08a0afecb99515d1339623be63a7539d4    refs/remotes/origin/master
6a7095b86cccdfd4b28e4dea633d0930809ae9ac    refs/tags/v1.0
1a53462b1ecf0abfea8245016304cda9c78b420d    refs/tags/v1.0^{}
5113a7cbcf35c47b680a9c36e15e5fa01ef1d2e6    refs/tags/v1.1
79a3073ecabe65d3c8051520f8007d9e49a65a06    refs/tags/v1.1^{}
a00249209597ea1214d80ee38f228c40db7022c2    refs/tags/v1.1.0
e892bce8d25d87368ab557fee0d30810bef7e31e    refs/tags/v1.1.0^{}
b491a312c39088533cb069e4ab1ae8a00d1f6bfe    refs/tags/v1.1.2
a3f7618dada7ed60d8190426152ffd90e0e40a86    refs/tags/v1.1.2^{}

Làm git ls-remote .trên bản sao Tre tạo ra:

azg@olympus:/var/atlassian/application-data/bamboo/xml-data/build-dir/HPCMOM-RELEASE-JOB1$ git ls-remote .
2422ce066ac35dae3c54f1435ef8dae5008a9a14    HEAD
57c08d581c0fd9e788049733fbdc9c22b9a6ae00    refs/heads/master
57c08d581c0fd9e788049733fbdc9c22b9a6ae00    refs/remotes/origin/HEAD
57c08d581c0fd9e788049733fbdc9c22b9a6ae00    refs/remotes/origin/master
7539f9700d78a1b766fca7ed9f409914f1ea9d08    refs/tags/vnull
6bfa8c3fdb1f8f56a385035f01b1b77b6e88da8b    refs/tags/vnull^{}

và điều này rất kỳ lạ là tại sao đầu ra của dòng nhân bản phát triển địa phương lại khác với sản lượng của cây tre?


4
Được rồi, vì vậy vấn đề ở đây là thanh toán trong Bamboo đang ở trạng thái "HEAD tách rời". Có vẻ như Maven đang cố gắng phân tích cú pháp tên chi nhánh hiện tại và không thành công vì ở trạng thái HEAD tách rời, tham chiếu HEADkhông còn đề cập đến tên chi nhánh nữa mà là SHA1. Bạn có thể mô phỏng này tại địa phương bằng cách chạy git checkout SHA1hoặc nối ^{}đến tên của một ref: git checkout HEAD^{}. Có vẻ như plugin Bamboo git cố gắng kiểm tra chi nhánh, nếu có thể. Vì vậy, có vẻ như bạn có một cuộc đua: trước khi bản dựng chạy, những thứ mới đã xuất hiện. Tôi vẫn chưa rõ làm thế nào để sửa chữa nó.
John Szakmeister

Câu trả lời:


153

Tôi đã gặp phải lỗi tương tự trên Jenkins kết hợp với plugin phát hành maven, chúng tôi đã khắc phục nó bằng cách chuyển đến Hành vi bổ sung, Kiểm tra chi nhánh cục bộ cụ thể và nhập 'chính'

Tôi nhận thấy đây không phải là một giải pháp nhưng nó có thể cung cấp cho bạn một số hướng để xem xét.


3
Nó hoạt động khi bạn đang xây dựng từ nhánh chính. Nếu chi nhánh của bạn khác, ngay cả sau khi đổi thành tên chi nhánh cụ thể, nó vẫn không hoạt động.
siddhusingh

29
Tôi đang ở một nhánh khác với master và nó cũng hoạt động. Tôi nghĩ rằng vấn đề là plugin jenkins git thường kiểm tra chi nhánh ở trạng thái đầu tách rời. Vì vậy, git symbolic-reflệnh không thành công. Bằng cách thêm Check out to specific local branchchúng tôi sửa chữa điều này.
René Link

16
Sử dụng **thay vì mastersẽ khớp tên chi nhánh cục bộ với tên chi nhánh từ xa.
neXus

1
Theo trợ giúp ( Git Plugin - Jenkins - Jenkins Wiki ), việc để trống trường cũng có thể hoạt động cho việc này: "Nếu được chọn và giá trị của nó là một chuỗi trống hoặc **thì tên nhánh được tính từ nhánh từ xa mà không có nguồn gốc . "
evgeny9

@jvwilge Trong trường hợp của tôi, đó là một đường dẫn được chia sẻ, vì vậy tất cả các cài đặt đều đến từ pom.xml. làm cách nào để viết mã hướng dẫn này: Các hành vi bổ sung, Kiểm tra chi nhánh cục bộ cụ thể và nhập 'master'
arielma

31

Đối với Jenkins và GIT, hãy thêm hành vi bổ sung check out to specific local branchvà sử dụng Workspace Cleanup Pluginđể dọn dẹp không gian làm việc của bạn khi bắt đầu công việc CI của bạn.


1
cảm ơn, điều này đã làm việc cho tôi. Tôi cũng cần phải thêm vào -Darguments="-Dmaven.deploy.skip=true".
timbru31

@toschneck Xin chào, tôi đang gặp sự cố chính xác này khi sử dụng Jenkins và Git. Bạn có thể vui lòng mở rộng câu trả lời của mình ở đây để bao gồm các lệnh và cấu hình cho plugin bạn đã đề cập. Cảm ơn.
Jeremy

Lý do để làm sạch thêm không gian làm việc là gì?
kap

Hiện tại tôi đã chuyển xa hơn sang plugin maven-jgitflow. Nó hỗ trợ phân nhánh tính năng và sửa lỗi và có chức năng phát hành tốt nhất mà tôi từng thấy. bitbucket.org/atlassian/jgit-flow/wiki/Home
toschneck

Thêm "kiểm tra đến chi nhánh địa phương cụ thể" cũng hoạt động với tôi.
johnlinp

11

Sự cố trong Atlassian Bamboo đã được giải quyết bằng cách bỏ chọn cài đặt mặc định Use shallow clonesvới mô tả Fetches the shallowest commit history possible. Do not use if your build depends on full repository history. Hộp kiểm này nằm trong tab Cấu hình kế hoạch -> Kho lưu trữ -> Git -> Tùy chọn nâng cao

Sau đó, tất cả các bản phát hành hoạt động tốt.


5

Bỏ chọn Use shallow cloneslà không đủ trong trường hợp của tôi (tôi đang sử dụng Bamboo 5.7.2). Tôi cũng cần bật Force Clean Buildtác vụ Kiểm tra mã nguồn. Việc kích hoạt lệnh Use shallow clonessẽ hoạt động cho lần thực hiện công việc tiếp theo, nhưng tất cả các lần thực hiện tiếp theo sẽ dẫn đến cùng một lỗi.


4

Tôi đã gặp vấn đề này trong phần Bamboo được sử dụng với plugin Maven Release. Tôi đã sửa nó bằng cách bật tùy chọn 'Force Clean Build' trong tác vụ 'Kiểm tra Nguồn'. Bamboo nói rằng điều này có thể làm cho việc xây dựng chậm hơn, nhưng nó hoạt động và tôi không thấy thời gian tăng đáng kể.


Bạn đã sử dụng phiên bản nào của Bamboo? Tôi đã thử điều này nhưng nó không hiệu quả với tôi khi đó.
SkyWalker

1
Tôi đang sử dụng 5.3 build 4101-09 13 Tháng 12
zakmck

3

Tôi đang sử dụng Dự án nhóm của Jenkins với Thiết lập dự án nhiều nhánh.

Trước đây tôi đã sử dụng checkout scmlệnh.

Bây giờ tôi đang sử dụng mã sau:

checkout([
                 $class: 'GitSCM',
                 branches: scm.branches,
                 extensions: scm.extensions + [[$class: 'CleanCheckout'], [$class: 'LocalBranch', localBranch: 'new']],
                 userRemoteConfigs: scm.userRemoteConfigs
            ])

1
Đã nhận được một ủng hộ này vì nó dường như thực hiện thủ thuật. Nhưng sau khi mày mò thêm, tôi nhận thấy rằng nó thực sự tạo ra một nhánh mới có tên là "mới" (khi sử dụng với plugin phát hành maven). Một cách tiếp cận đúng hơn sẽ là thay đổi newvới **, điều này làm cho tên nhánh cục bộ giống với tên điều khiển từ xa.
Tobb

3

điều làm việc cho tôi là gọi "git checkout -f master" trước khi gọi "mvn release"


0

Đối với chúng tôi, vấn đề là với phiên bản maven được chỉ định trong tệp pom. Đã sửa phiên bản maven được chỉ định trong tệp pom phù hợp với phiên bản trong tre đã khắc phục sự cố


0

Đối với những hành động GitHub bạn có thể thiết lập actions/checkout@v2vớiref: master

steps:
  - uses: actions/checkout@v2
    with:
      ref: master
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.