OSC SVN无法提交空文件夹的解决办法

OSC码云还是不错的,非常适合小公司或者个人组织,支持git和svn。但由于svn是在git基础上模拟出来的,因此git不支持提交空文件夹的特性也遗传到了svn上。

在OSC码云的网站上可以创建空文件夹,但是他会提示说“由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件”。

网上也搜了一下,也给一个解决方案吧,思路是:

1. 提供一个小程序,放在项目的根目录下(比如和README.md放一个目录下)。

2. 提交前,双击一下,程序会自动检查当前目录及其子目录,检测是否存在空目录。

3. 如果是空目录,则会自动添加一个.keep的空文本文件。

4. 程序不是空目录,则会检查是否只存在一个.keep文件,如果是,则不做任何处理;如果不是,则尝试删除.keep文件(不删除也没有关系,但对于我这种强迫症来说,很难受)。

5. 默认情况下,程序是走上面的逻辑。不过万一你想清空所有的.keep文件,加了个命令行参数,如果是"-clean .keep"就清空所有目录及子目录下名为.keep的文件。

以下是Java代码实现(也可以用bat, python, c/c++等)

import java.io.File;
import java.io.IOException;

public class gitsvn
{
	public static final String GITSVN = ".keep";

	private static void check(File path) throws Exception 
	{
		File[] files = path.listFiles();
		if(files.length == 0)
		{
			System.out.printf("+ %s/.keep\n", path.getAbsolutePath());
			mark(path.getAbsolutePath());
		} 
		else
		{
			if(files.length!=1 || !files[0].getName().equals(GITSVN))
			{
				for (int i=0; i<files.length; i++) 
				{
					if(files[i].getName().equals(GITSVN))
					{
						System.out.printf("- %s\n", files[i].getAbsolutePath());
						files[i].delete();
					}
					
					if (files[i].isDirectory()) 
					{
						try 
						{
							check(files[i]);
						} 
						catch (Exception e) 
						{
							
						}
					}
				}
			}
		}
	}
	
	private static void clear(File path, String target) throws Exception 
	{
		File[] files = path.listFiles();

		for (int i=0; i<files.length; i++) 
		{
			if(files[i].getName().equals(target))
			{
				System.out.printf("- %s\n", files[i].getName());
				files[i].delete();
			}
			else if (files[i].isDirectory()) 
			{
				try 
				{
					clear(files[i], target);
				} 
				catch (Exception e) 
				{
					
				}
			}
		}
	}

	public static void mark(String path) 
	{
		File file = new File(path + "/" + GITSVN);
		try 
		{
			file.createNewFile();
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args)
	{
		String home = System.getProperty("user.dir");
		File file = new File(home);

		try 
		{
			if(args.length==2 && args[0].equals("-clean"))
			{
				clear(file, args[1]);
			}
			else
			{
				check(file);
			}
		} 
		catch (Exception e) 
		{
			e.printStackTrace();
		}
	}
}

用法:

1. 命令行下:java -jar gitsvn.jar,或windows下直接双击。

2. 命令行下:java -jar gitsvn.jar -clean .keep,清空当前目录(及其子目录)下所有名为.keep的文件(.keep也可以换成其他的)。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值