title: Why does replacing a dependency's version and path attribute with a git hash cause compilation errors?
body: <p>I have a strange dependency problem. Here are steps to reproduce:</p>
  
  <pre class="lang-none prettyprint-override"><code>❯ rustc -V
  rustc 1.35.0-nightly (82e2f3ec2 2019-03-20)
  
  ❯ git clone https://github.com/google/tarpc.git
  ❯ cd tarpc/example-service
  
  ❯ cargo build
      Finished dev [unoptimized + debuginfo] target(s) in 0.13s
  
  ❯ git rev-parse HEAD
  06544faa5a0872d4be989451afc0a2b1e1278df4
  </code></pre>
  
  <p>Now I replace a line in Cargo.toml from</p>
  
  <pre><code>bincode-transport = { package = "tarpc-bincode-transport", version = "0.3", path = "../bincode-transport" }
  </code></pre>
  
  <p>to</p>
  
  <pre><code>bincode-transport = { package = "tarpc-bincode-transport", git="https://github.com/google/tarpc.git", rev="06544faa5a0872d4be989451afc0a2b1e1278df4" }
  </code></pre>
  
  <p>which represents the same codebase (I think <code>version = 0.3</code> is meaningless),</p>
  
  <p>Then I have a build error</p>
  
  <pre class="lang-none prettyprint-override"><code>❯ cargo build
      Blocking waiting for file lock on the git checkouts
      Updating git repository `https://github.com/google/tarpc.git`
     Compiling tarpc-example-service v0.2.0 (tarpc/example-service)
  error[E0277]: the trait bound `tarpc_bincode_transport::Transport&lt;tokio_tcp::stream::TcpStream, _, _&gt;: tarpc_lib::transport::Transport` is not satisfied
    --&gt; example-service/src/server.rs:45:4
     |
  45 |         .incoming(transport)
     |          ^^^^^^^^ the trait `tarpc_lib::transport::Transport` is not implemented for `tarpc_bincode_transport::Transport&lt;tokio_tcp::stream::TcpStream, _, _&gt;`
  
  error[E0277]: the trait bound `tarpc_bincode_transport::Transport&lt;tokio_tcp::stream::TcpStream, _, _&gt;: tarpc_lib::transport::Transport` is not satisfied
    --&gt; example-service/src/client.rs:20:29
     |
  20 |     let mut client = await!(service::new_stub(client::Config::default(), transport))?;
     |                             ^^^^^^^^^^^^^^^^^ the trait `tarpc_lib::transport::Transport` is not implemented for `tarpc_bincode_transport::Transport&lt;tokio_tcp::stream::TcpStream, _, _&gt;`
     |
     = note: required by `service::new_stub`
  
  error: aborting due to previous error
  
  For more information about this error, try `rustc --explain E0277`.
  error: Could not compile `tarpc-example-service`.
  warning: build failed, waiting for other jobs to finish...
  error[E0599]: no method named `respond_with` found for type `impl futures_core::stream::Stream` in the current scope
    --&gt; example-service/src/server.rs:48:4
     |
  48 |         .respond_with(service::serve(HelloServer));
     |          ^^^^^^^^^^^^
     |
     = note: the method `respond_with` exists but the following trait bounds were not satisfied:
             `&amp;impl futures_core::stream::Stream : tarpc_lib::server::Handler&lt;_, _, _&gt;`
             `&amp;mut impl futures_core::stream::Stream : tarpc_lib::server::Handler&lt;_, _, _&gt;`
             `impl futures_core::stream::Stream : tarpc_lib::server::Handler&lt;_, _, _&gt;`
  
  error: aborting due to 2 previous errors
  
  Some errors occurred: E0277, E0599.
  For more information about an error, try `rustc --explain E0277`.
  error: Could not compile `tarpc-example-service`.
  </code></pre>
  
  <p><code>cargo clean</code> didn't help. How is this possible? </p>