Resolve "git cat-file -t refs/heads/master:' exited with code 128 saying: fatal: not a git repository" in Bitbucket Data Center

Platform Notice: Data Center Only - This article only applies to Atlassian products on the Data Center platform.

Note that this KB was created for the Data Center version of the product. Data Center KBs for non-Data-Center-specific features may also work for Server versions of the product, however they have not been tested. Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.

*Except Fisheye and Crucible

Summary

On browsing the repository page, an error message "'git cat-file -t refs/heads/master:'' exited with code 128 saying: fatal: not a git repository (or any parent up to mount point /var/atlassian/application-data/bitbucket) Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)" appears.

Environment

  • Solution verified in Bitbucket Data Center 8.19.3

  • Applicable in other Bitbucket Data Center versions.

Diagnosis

Theatlassian-bitbucket.logwill have the following error stack trace:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 2024-08-07 14:06:10,752 ERROR [http-nio-7990-exec-7] user1 @F1MA5Vx846x552x0 je9tkz 172.29.XX.XX,10.229.XX.XX "GET /projects/PRO1/repos/repo5/browse HTTP/1.1" c.a.s.i.w.HandlerExceptionResolverImpl 'git cat-file -t refs/heads/master:' exited with code 128 saying: fatal: not a git repository (or any parent up to mount point /var/atlassian/application-data/bitbucket) Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). com.atlassian.bitbucket.scm.CommandFailedException: 'git cat-file -t refs/heads/master:' exited with code 128 saying: fatal: not a git repository (or any parent up to mount point /var/atlassian/application-data/bitbucket) Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). at com.atlassian.stash.internal.scm.git.mesh.DefaultErrorTranslator.translateDefault(DefaultErrorTranslator.java:192) . . . at com.atlassian.stash.internal.hazelcast.ConfigurableWebFilter.doFilter(ConfigurableWebFilter.java:38) at java.base/java.lang.Thread.run(Thread.java:829) ... 374 frames trimmed Caused by: io.grpc.StatusRuntimeException: INTERNAL: [git cat-file -t refs/heads/master:] exited with code 128 saying: fatal: not a git repository (or any parent up to mount point /var/atlassian/application-data/bitbucket) Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). at io.grpc.Status.asRuntimeException(Status.java:535) at io.grpc.stub.ClientCalls$StreamObserverToCallListenerAdapter.onClose(ClientCalls.java:487) at io.grpc.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39) at io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23) . . . at io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:70) at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:743) at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:722) at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ... 2 common frames omitted

Full stack trace

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 2024-08-07 14:06:10,752 ERROR [http-nio-7990-exec-7] user1 @F1MA5Vx846x552x0 je9tkz 172.29.XX.XX,10.229.XX.XX "GET /projects/PRO1/repos/repo5/browse HTTP/1.1" c.a.s.i.w.HandlerExceptionResolverImpl 'git cat-file -t refs/heads/master:' exited with code 128 saying: fatal: not a git repository (or any parent up to mount point /var/atlassian/application-data/bitbucket) Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set). com.atlassian.bitbucket.scm.CommandFailedException: 'git cat-file -t refs/heads/master:' exited with code 128 saying: fatal: not a git repository (or any parent up to mount point /var/atlassian/application-data/bitbucket) Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).     at com.atlassian.stash.internal.scm.git.mesh.DefaultErrorTranslator.translateDefault(DefaultErrorTranslator.java:192)     at com.atlassian.stash.internal.scm.git.mesh.DefaultErrorTranslator.translate(DefaultErrorTranslator.java:143)     at com.atlassian.stash.internal.scm.git.mesh.DefaultErrorTranslator.translateIfKnownCause(DefaultErrorTranslator.java:266)     at com.atlassian.stash.internal.scm.git.mesh.DefaultErrorTranslator.maybeTranslate(DefaultErrorTranslator.java:57)     at com.atlassian.stash.internal.scm.git.mesh.AbstractFutureResponseObserver.maybeTranslate(AbstractFutureResponseObserver.java:209)     at com.atlassian.stash.internal.scm.git.mesh.AbstractFutureResponseObserver$ResponseFuture.translateCause(AbstractFutureResponseObserver.java:298)     at com.atlassian.stash.internal.scm.git.mesh.AbstractFutureResponseObserver$ResponseFuture.get(AbstractFutureResponseObserver.java:235)     at com.atlassian.stash.internal.scm.git.mesh.AbstractFutureResponseObserver.asResult(AbstractFutureResponseObserver.java:151)     at com.atlassian.stash.internal.scm.git.mesh.AbstractFutureResponseObserver.asResult(AbstractFutureResponseObserver.java:139)     at com.atlassian.stash.internal.scm.git.mesh.GrpcContentClient.getNodeType(GrpcContentClient.java:47)     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     at jdk.internal.reflect.GeneratedMethodAccessor203.invoke(Unknown Source)     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     at com.atlassian.stash.internal.scm.git.mesh.MeshGitCommandFactory$27.call(MeshGitCommandFactory.java:847)     at com.atlassian.stash.internal.scm.git.mesh.MeshGitCommandFactory$27.call(MeshGitCommandFactory.java:841)     at com.atlassian.stash.internal.content.DefaultContentService.getType(DefaultContentService.java:197)     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     at jdk.internal.reflect.GeneratedMethodAccessor203.invoke(Unknown Source)     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     at jdk.internal.reflect.GeneratedMethodAccessor949.invoke(Unknown Source)     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     at com.atlassian.stash.internal.web.repos.RepositoryController.browseFilePath(RepositoryController.java:327)     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:24)     at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:24)     at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:24)     at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:24)     at com.atlassian.applinks.core.rest.context.ContextFilter.doFilter(ContextFilter.java:24)     at com.atlassian.bitbucket.internal.importer.web.RepositoryImportFilter.doFilter(RepositoryImportFilter.java:64)     at com.atlassian.stash.internal.spring.lifecycle.LifecycleJohnsonServletFilterModuleContainerFilter.doFilter(LifecycleJohnsonServletFilterModuleContainerFilter.java:42)     at com.atlassian.bitbucket.internal.ratelimit.servlet.filter.RateLimitFilter.doFilter(RateLimitFilter.java:75)     at com.atlassian.theme.filter.DefaultRequestOverrideServletFilter.doFilter(DefaultRequestOverrideServletFilter.java:70)     at com.atlassian.troubleshooting.thready.filter.AbstractThreadNamingFilter.doFilter(AbstractThreadNamingFilter.java:46)     at com.atlassian.stash.internal.spring.lifecycle.LifecycleJohnsonServletFilterModuleContainerFilter.doFilter(LifecycleJohnsonServletFilterModuleContainerFilter.java:42)     at com.atlassian.stash.internal.web.auth.AuthorizationFailureInterceptor.doFilterInternal(AuthorizationFailureInterceptor.java:39)     at com.atlassian.stash.internal.spring.security.StashAuthenticationFilter.doFilter(StashAuthenticationFilter.java:85)     at com.atlassian.stash.internal.web.auth.BeforeLoginPluginAuthenticationFilter.doInsideSpringSecurityChain(BeforeLoginPluginAuthenticationFilter.java:112)     at com.atlassian.stash.internal.web.auth.BeforeLoginPluginAuthenticationFilter.doFilter(BeforeLoginPluginAuthenticationFilter.java:75)     at com.atlassian.security.auth.trustedapps.filter.TrustedApplicationsFilter.doFilter(TrustedApplicationsFilter.java:94)     at com.atlassian.oauth.serviceprovider.internal.servlet.OAuthFilter.doFilter(OAuthFilter.java:67)     at com.atlassian.oauth2.provider.core.web.AccessTokenFilter.doFilter(AccessTokenFilter.java:82)     at com.atlassian.stash.internal.spring.lifecycle.LifecycleJohnsonServletFilterModuleContainerFilter.doFilter(LifecycleJohnsonServletFilterModuleContainerFilter.java:42)     at com.atlassian.plugins.authentication.sso.web.filter.loginform.DisableNativeLoginAuthFilter.doFilter(DisableNativeLoginAuthFilter.java:55)     at com.atlassian.plugins.authentication.basicauth.filter.DisableBasicAuthFilter.doFilter(DisableBasicAuthFilter.java:70)     at com.atlassian.troubleshooting.thready.filter.AbstractThreadNamingFilter.doFilter(AbstractThreadNamingFilter.java:46)     at com.atlassian.stash.internal.spring.lifecycle.LifecycleJohnsonServletFilterModuleContainerFilter.doFilter(LifecycleJohnsonServletFilterModuleContainerFilter.java:42)     at com.atlassian.security.auth.trustedapps.filter.TrustedApplicationsFilter.doFilter(TrustedApplicationsFilter.java:94)     at com.atlassian.oauth.serviceprovider.internal.servlet.OAuthFilter.doFilter(OAuthFilter.java:67)     at com.atlassian.oauth2.provider.core.web.AccessTokenFilter.doFilter(AccessTokenFilter.java:82)     at com.atlassian.stash.internal.spring.lifecycle.LifecycleJohnsonServletFilterModuleContainerFilter.doFilter(LifecycleJohnsonServletFilterModuleContainerFilter.java:42)     at com.atlassian.plugin.connect.plugin.auth.oauth2.DefaultSalAuthenticationFilter.doFilter(DefaultSalAuthenticationFilter.java:69)     at com.atlassian.plugin.connect.plugin.auth.user.ThreeLeggedAuthFilter.doFilter(ThreeLeggedAuthFilter.java:109)     at com.atlassian.plugins.authentication.sso.web.filter.loginform.DisableNativeLoginAuthFilter.doFilter(DisableNativeLoginAuthFilter.java:55)     at com.atlassian.plugins.authentication.basicauth.filter.DisableBasicAuthFilter.doFilter(DisableBasicAuthFilter.java:70)     at com.atlassian.jwt.internal.servlet.JwtAuthFilter.doFilter(JwtAuthFilter.java:37)     at com.atlassian.analytics.client.filter.DefaultAnalyticsFilter.doFilter(DefaultAnalyticsFilter.java:26)     at com.atlassian.analytics.client.filter.AbstractHttpFilter.doFilter(AbstractHttpFilter.java:33)     at com.atlassian.troubleshooting.thready.filter.AbstractThreadNamingFilter.doFilter(AbstractThreadNamingFilter.java:46)     at com.atlassian.stash.internal.spring.lifecycle.LifecycleJohnsonServletFilterModuleContainerFilter.doFilter(LifecycleJohnsonServletFilterModuleContainerFilter.java:42)     at com.atlassian.stash.internal.web.auth.BeforeLoginPluginAuthenticationFilter.doBeforeBeforeLoginFilters(BeforeLoginPluginAuthenticationFilter.java:90)     at com.atlassian.stash.internal.web.auth.BeforeLoginPluginAuthenticationFilter.doFilter(BeforeLoginPluginAuthenticationFilter.java:73)     at com.atlassian.stash.internal.request.DefaultRequestManager.doAsRequest(DefaultRequestManager.java:84)     at com.atlassian.stash.internal.hazelcast.ConfigurableWebFilter.doFilter(ConfigurableWebFilter.java:38)     at java.base/java.lang.Thread.run(Thread.java:829)     ... 374 frames trimmed Caused by: io.grpc.StatusRuntimeException: INTERNAL: [git cat-file -t refs/heads/master:] exited with code 128 saying: fatal: not a git repository (or any parent up to mount point /var/atlassian/application-data/bitbucket) Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).     at io.grpc.Status.asRuntimeException(Status.java:535)     at io.grpc.stub.ClientCalls$StreamObserverToCallListenerAdapter.onClose(ClientCalls.java:487)     at io.grpc.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39)     at io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23)     at io.grpc.ForwardingClientCallListener$SimpleForwardingClientCallListener.onClose(ForwardingClientCallListener.java:40)     at com.atlassian.stash.internal.scm.git.mesh.LastSeenClientInterceptor$LastSeenClientListener.onClose(LastSeenClientInterceptor.java:40)     at io.grpc.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39)     at io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23)     at io.grpc.ForwardingClientCallListener$SimpleForwardingClientCallListener.onClose(ForwardingClientCallListener.java:40)     at com.atlassian.stash.internal.scm.git.mesh.StatefulClientCallListener.onClose(StatefulClientCallListener.java:34)     at io.grpc.PartialForwardingClientCallListener.onClose(PartialForwardingClientCallListener.java:39)     at io.grpc.ForwardingClientCallListener.onClose(ForwardingClientCallListener.java:23)     at io.grpc.ForwardingClientCallListener$SimpleForwardingClientCallListener.onClose(ForwardingClientCallListener.java:40)     at com.atlassian.stash.internal.scm.git.mesh.DeadlinePropagatingClientInterceptor$DeadlinePropagatingListener.onClose(DeadlinePropagatingClientInterceptor.java:156)     at com.atlassian.stash.internal.scm.git.mesh.ErrorHandlingClientInterceptor$ErrorHandlingCall$1.onClose(ErrorHandlingClientInterceptor.java:149)     at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:562)     at io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:70)     at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:743)     at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:722)     at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37)     at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133)     at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)     ... 2 common frames omitted

Please refer toIdentifying a repository's ID in Bitbucket Data CenterKB article to locate repository path on disk and repository id.

Cause

This error may occur due to one of the following causes.

  • Cause 1: The repository directory at <Bitbucket-Home-Directory>/shared/data/repositories/<repository-id> is missing the refs subdirectory.

  • Cause 2: Bitbucket cannot access data in the objects subdirectory, which is located within <Bitbucket-Home-Directory>/shared/data/repositories/<repository-id>, because the OS user running the Bitbucket process lacks the necessary read-write permissions.

Solution

  • Resolution1: Restore the refs directory from the most recent backup.

  • Resolution2: Update the permissions on the objects subdirectory located at <Bitbucket-Home-Directory>/shared/data/repositories/<repository-id> to ensure OS user running the Bitbucket process can read, write, and execute the necessary files.

Updated on March 14, 2025

Still need help?

The Atlassian Community is here for you.