I have recently obtained a new dedicated server which I'm now setting up. It's running on 64-bit Debian 6.0. I have cloned a fairly large git repository (177 MB including working files) onto this server. Switching to a different branch is very very slow. On my laptop it takes 1-2 seconds, on this server it can take half a minute. After some investigation it turns out to be some kind of DNS timeout. Here's an exhibit from strace -s 128 git checkout release:

stat("/etc/resolv.conf", {st_mode=S_IFREG|0644, st_size=132, ...}) = 0
connect(5, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("")}, 16) = 0
poll([{fd=5, events=POLLOUT}], 1, 0)    = 1 ([{fd=5, revents=POLLOUT}])
sendto(5, "\235\333\1\0\0\1\0\0\0\0\0\0\35Debian-60-squeeze-64-minimal\n\17happyponies\3com\0\0\1\0\1", 67, MSG_NOSIGNAL, NULL, 0) = 67
poll([{fd=5, events=POLLIN}], 1, 5000)  = 0 (Timeout)

This snippet repeats several times per 'git checkout' call.

My server's hostname was originally Debian-60-squeeze-64-minimal. I had changed it to shell.happyponies.com by running hostname shell.happyponies.com, editing /etc/hostname and rebooting the server.

I don't understand the DNS protocol, but it looks like Git is trying to lookup the IP for Debian-60-squeeze-64-minimal as well as for happyponies.com. Why does Debian-60-squeeze-64-minimal come back even though I've already changed the host name? Why does Git perform DNS lookups at all? Why are these lookups so slow? I've already verified that all DNS servers in /etc/resolv.conf are up and responding slowly, yet Git's own lookups time out.

Changing the host name back to Debian-60-squeeze-64-minimal seems to fix the slowness.

Basically I just want to fix whatever DNS issues my server has because I'm sure they will cause more problems that just slowing down git checkout. But I'm not sure sure what the problem exactly is and what these symptoms mean.


Isn't the old hostname saved on any git configuration? Like git remote? Take a look on all possible ways where git can save a hostname and check if the old hostname is there.

  • No. The remote is a different server. For some reason it's querying the IP for the local server host name. – Hongli Lai Feb 22 '11 at 14:39

The server name should be changed in the file /etc/hosts as well.

When changing a server name, launching a recursive grep on /etc can help to find every places where the old server name has to be corrected :

grep -r "oldservername" /etc
  • your grep syntax is wrong. Should be: grep -r <string> <location> – Coops Feb 22 '11 at 14:24
  • Yes you are right, I have corrected my answer, thanks. – jon_d Feb 22 '11 at 14:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.