在一个Cargo项目中,哪些文件应该被包含在.gitignore文件中?

32

我使用cargo new创建了一个Rust的“hello world”应用程序。当我执行git status时,它显示了一堆文件:

A  rust/welcomec/Cargo.lock
A  rust/welcomec/Cargo.toml
A  rust/welcomec/src/main.rs
A  rust/welcomec/target/debug/.cargo-lock
A  rust/welcomec/target/debug/.fingerprint/welcomec-2d68725c8fae6fd1/bin-welcome-2d68725c8fae6fd1
A  rust/welcomec/target/debug/.fingerprint/welcomec-2d68725c8fae6fd1/bin-welcome-2d68725c8fae6fd1.json
A  rust/welcomec/target/debug/.fingerprint/welcomec-2d68725c8fae6fd1/dep-bin-welcome-2d68725c8fae6fd1
A  rust/welcomec/target/debug/deps/welcome-2d68725c8fae6fd1
A  rust/welcomec/target/debug/welcome
A  rust/welcomec/target/debug/welcome.d

我可以安全地忽略这些文件和/或目录吗?

2个回答

43

摘要

可执行箱的.gitignore文件

# Generated files
/target/

.gitignore 用于库包

# Generated files
/target/

# Well, this depends... See below!
Cargo.lock

细节

你可以完全忽略target/文件夹。它只包含生成的文件(例如编译产物),而且通常很大。

如果你正在开发一个可执行程序,那就是这样了!只有一个入口。

对于库项目,你可能还想忽略Cargo.lock。但这有点微妙。关于这个问题的官方立场最近改变了Cargo.lock可以实现可复现的构建,因为它记录了所有依赖的精确版本。这非常有用。对于可执行程序,你绝对希望有这些可复现的构建,因此上面的建议。

重要的是要理解,如果一个项目使用了你的库,你的Cargo.lock会被忽略!Cargo只关心依赖项的Cargo.toml。所以,Cargo.lock是否在你的代码库中基本上只与你开发库有关。

一方面,你应该始终使用所有依赖项的最新版本来测试你的库。这是反对使用Cargo.lock的一个理由。
另一方面,Cargo.lock给你带来了与其他项目相同的好处:可复现的构建意味着稳定的CI,更容易进行二分查找等等。
最终,决定权在你手中。但请放心:你不会真的搞砸。无论哪种方式通常都可以。
请注意:cargo new 命令应该已经为您创建了一个适当的 .gitignore 文件。

5
我要补充的一件事是,如果你在现有的git存储库中创建一个子目录,它不会自动生成.gitignore文件。 - reddi.eth

7
你可以从GitHub 上 Rust 的 gitignore 文件中获取一些灵感。撰写此文时,文件的内容如下:
# Generated by Cargo
# will have compiled files and executables
debug/
target/

# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
Cargo.lock

# These are backup files generated by rustfmt
**/*.rs.bk

# MSVC Windows builds of rustc generate these, which store debugging information
*.pdb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接